Spring persist具有唯一字段的对象会创建重复的异常

时间:2014-08-21 04:53:53

标签: java spring hibernate jpa persist

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

在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);

1 个答案:

答案 0 :(得分:0)

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

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