【问题标题】:Hibernate ManyToMany update error休眠多对多更新错误
【发布时间】:2015-08-21 10:47:31
【问题描述】:

我对休眠和@ManyToMany 注释有疑问。请看两个实体类:

公司实体:

@ManyToMany
@JoinTable(name="company_user_tab",
     joinColumns={@JoinColumn(name="company_id")},
     inverseJoinColumns={@JoinColumn(name="user_id")})
private Set<User> users = new HashSet<User>();

... getters and setters

用户实体:

@ManyToMany(mappedBy="users")
private Set<Company> companies = new HashSet<Company>();

... getters and setters

场景: 我创建了第一个用户和第一个公司并正确连接它们。

当我创建新用户并尝试用新用户更新现有公司时出现问题。我在 company_user_tab 上收到数据库错误:“重复键值违反唯一约束”

看起来像休眠插入再次加入表第一个用户女巫与公司正确关联。

我如何更新对象?

entityManager.merge(object);

当然,我在用户到公司和公司到用户之前添加例如:

user.getCompanies().add(company);
company.getUsers().add(user);

感谢您的建议。

【问题讨论】:

  • 看起来你没有正确设置你的级联。尝试在您的套装上使用@Cascade({CascadeType.MERGE})。那应该可以解决这个问题。

标签: java hibernate many-to-many


【解决方案1】:

试试这个代码:

@ManyToMany(cascade= {CaseCadeType.ALL})
@JoinTable(
    name = "company_user_tab",
    joinColumns = { @JoinColumn(name="company_id") },
    inverseJoinColumns = { @JoinColumn(name="user_id") }
)
private Set<User> users = new HashSet<User>();

// setters and getters

【讨论】:

  • 我确信@Cascade({CascadeType.ALL}) 也会产生这个错误。在以前的版本中,我检查了该选项。我没有检查@Nicholas Robinson 的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多