Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有唯一字段的Spring持久化对象创建重复异常_Java_Spring_Hibernate_Jpa_Persist - Fatal编程技术网

Java 具有唯一字段的Spring持久化对象创建重复异常

Java 具有唯一字段的Spring持久化对象创建重复异常,java,spring,hibernate,jpa,persist,Java,Spring,Hibernate,Jpa,Persist,我有一个用户对象(第一个、最后一个、角色id)和角色对象(角色id、名称),角色名称是唯一的字段。从表单提交中,我获得了用户数据和角色名。由于所有用户的角色名都是“user”,当我在第一个用户之后持久化用户对象时,会出现重复的角色名异常。我相信有一个简单的解决我的问题,请帮助 在User.java中: //bi-directional many-to-one association to Role @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeT

我有一个用户对象(第一个、最后一个、角色id)和角色对象(角色id、名称),角色名称是唯一的字段。从表单提交中,我获得了用户数据和角色名。由于所有用户的角色名都是“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);

这是因为您正在关联上使用
cascade=PERSIST
。这告诉JPA,如果您
persist
a
用户
,那么它也必须
persist
关联的
角色
。这对第一个用户有效,但后续的
用户
持久化
操作将失败,因为
角色
已经存在


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

另请参见Thx!那么,我是否必须从role中选择role_id by name来检查角色名是否已经存在于所有用户中?并在持久化用户之前手动向用户添加角色\u id?