我有一個用戶和標籤表,並且還有一個user_tag_xref表,它包含多對多的關係.net netbeans爲我生成實體類(使用eclipselink),下面是實體映射在標籤上類User類jpa:當合並多對多以前的記錄被刪除
@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;
現在我正在我的業務邏輯問題的REST服務,JSON客戶端消耗此會見HOD
@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();
}
的問題是,每次我合併新用戶創建一個多對多的關係,如果現有的用戶ID = 6201與2,3,4標籤,而新用戶嘗試使用以標記ID 2,3,4, 刪除現有用戶並且新用戶合併到標籤。我已閱讀了幾篇關於重寫散列和等於我的實體類中的方法的文章,這些方法在eclipselink中默認被覆蓋,我也無法將我的集合類型更改爲設置或集合,因爲列表<>類型對於json數組完全適用。我已經很難過了,現在已經過了24小時,它可能是默認的映射策略是錯誤的嗎?我需要cascasde嗎?
任何人可以請幫助?請 –
當您調用合併時,t.getUserList()中的內容是什麼? t和tagList來自哪裏?如上所述,在調用合併時,您必須小心標籤實際上反映了數據庫中的內容。如果只是部分完成,則用部分數據覆蓋整個數據。另外,什麼是刪除,它只是連接表中的引用? – Chris
Chris的好問題。連接表中的引用是否被刪除? – Shailendra