ユーザーとタグのテーブルがあり、多対多の関係を保持する user_tag_xref テーブルもあります。現在、netbeans はエンティティ クラスを生成します (eclipselink を使用)。以下はエンティティ マッピング関係です。
ユーザークラス
@ManyToMany(mappedBy = "usersList")
private List<Tags> tagsList;
タグクラス
@JoinTable(name = "USERS_TAG_XREF", joinColumns = {
@JoinColumn(name = "TAG_ID", referencedColumnName = "TAG_ID")}, inverseJoinColumns = {
@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")})
@ManyToMany
private List<Users> usersList;
今、私のビジネス ロジック RESTfull サービスでは、json クライアントがこのメソッドを使用します。
@POST
@Path("/registration2/tag")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response registration2_3(List<Tags>tagList,@Context HttpServletRequest req){
Profile p =(Profile) registerMap.get(req.getSession().getId());
Users u = em.find(Users.class,p.getUserId());
for(Tags t : tagList){
t.getUsersList().add(u);
u.getTagsList().add(t);
em.merge(t);
em.merge(u);
}
logger.log(Level.INFO, "the taglist created for user");
return Response.ok(u,MediaType.APPLICATION_JSON).build();
}
問題は、新しいユーザーをマージして多対多の関係を作成するたびに、既存の userid=6201 に 2,3,4 のタグがあり、新しいユーザーが ID 2,3,4 のタグを使用しようとする場合です。 、既存のユーザーが削除され、新しいユーザーがタグにマージされます。エンティティクラスのメソッドにハッシュとイコールをオーバーライドすることに関するいくつかの記事を読みました。これらのメソッドはデフォルトで eclipselink でオーバーライドされます。また、List<> 型は json 配列に対して完全に機能するため、コレクション型を Set または Collection に変更できません。4 24 時間経ちましたが、現在苦労しています。デフォルトのマッピング戦略が間違っている可能性がありますか? カスケードする必要がありますか?