【问题标题】:Spring persist Object with unique field creates Duplicate exception具有唯一字段的 Spring 持久对象创建重复异常
【发布时间】:2014-08-21 04:53:53
【问题描述】:

我有一个 USER 对象(first、last、role_id)和 ROLE 对象(role_id、name),角色名称是一个唯一字段。从表单提交中,我得到用户数据和角色名称。而且由于所有用户的角色名称都为“用户”,因此当我在第一个用户之后保留用户对象时,我得到重复角色名称异常。我确信有一个简单的方法可以解决我的问题,请帮忙。

在 User.java 中:

//bi-directional many-to-one association to Role
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.PERSIST)
@JoinColumn(name="ROLE_ID")
private Role role;

保存用户对象:

em.persist(aaUser);

【问题讨论】:

标签: java spring hibernate jpa persist


【解决方案1】:

那是因为您在关联中使用了cascade=PERSIST。这告诉 JPA,如果你 persistUser,那么它也必须是 persist 关联的 Role。这将适用于第一个用户,但随后的 User persist 操作将失败,因为 Role 已经存在。

一种解决方法是删除级联,并在持久化任何用户之前持久化一次 Role 实体。

【讨论】:

  • 谢谢!那么我是否必须从 ROLE 中按名称选择 role_id 来检查角色名称是否已经存在于所有用户中?并在持久化用户之前手动将role_id添加到用户?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 2011-05-13
  • 2021-09-05
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多