如何在Hibernate ManyToMany Mapping

时间:2015-09-08 05:15:04

标签: java mysql hibernate

我在data_user表链接的数据表和用户表之间有一个Hibernate ManyToMany映射。现在我想更新数据表以向数据添加一个用户。如何更新链接表(data_user)以为新用户添加一个条目?

我首先更新了用户集:data.getUsers().add(user),然后在DAO层中尝试了session.saveOrUpdate(data)。但它删除了链接表中的所有内容。

Update1 :在数据库中手动创建了data_user(iddata_user,iddataroom,iduser)。

Update2 :为数据和用户实施了Hashcode和equals。

更新3 :我改为CascadeType.MERGE。这会更新我的链接表。此外,当CascadeType为ALL时,我永远不会从hibernate尝试的Data更新User表。

  

org.hibernate.NonUniqueObjectException:与...不同的对象   相同的标识符值已与会话关联。

PS:我对休眠很新。

public class Data {
    private int dataId;
    private Data parentData;
    private Set<User> users;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "data_user", joinColumns = { @JoinColumn(name = "iddata") },
        inverseJoinColumns = { @JoinColumn(name = "iduser") })
    public Set<User> getUsers() {
        return users;
    }
    ...
}

1 个答案:

答案 0 :(得分:1)

您需要在实体中覆盖equals()和hashCode(),否则您将更快或更晚地遇到问题,请参阅this以获取更多详细信息。

如果在覆盖equals()和hashCode()之后问题仍然存在,您可以在关系的另一侧添加mappedBy,请参阅this以获取更多详细信息。