我有一个用户和标签表,并且还有一个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