我有一个用户和标签表,还有一个包含多对多关系的 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 中默认被覆盖,我也无法将我的集合类型更改为 Set 或 Collection,因为 List<> 类型非常适合 json 数组。我现在很难过,已经24小时了,会不会是默认映射策略错误?我需要级联吗?