java.lang.IllegalStateException:使用@ManyToMany 3个实体对同一个实体进行多次表示 [英] java.lang.IllegalStateException: Multiple representations of the same entity with @ManyToMany 3 entities
问题描述
角色实体:
@Entity
公共类角色{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
私人整数角色ID;
私人字符串roleName;
私有字符串描述;
@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch = FetchType.EAGER)
@JoinTable(name =role_permission,joinColumns = {@ JoinColumn(name =role_id)},inverseJoinColumns = {@JoinColumn(name =permission_id)})
private Set< Permission> permissions = new LinkedHashSet< Permission>();
权限实体:
@Entity
公共类权限{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int permissionID;
private String permissionName;
私有字符串描述;
@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch = FetchType.EAGER)
@JoinTable(name =permission_functionality,joinColumns = {@ JoinColumn(name =permission_id)},inverseJoinColumns = {@JoinColumn(name =functionality_id)})
private Set< Functionality> functionalities = new LinkedHashSet<>();
功能实体:
@Entity
公共类功能{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
私人整数ID;
私人字符串名称;
我做了以下操作:
-
我创建了3个功能。
功能1,功能2,功能3
-
然后创建2个权限为:
a。权限1与功能1,功能2。
b。权限2与功能2,功能3。
-
然后创建一个角色为:
具有Permission1和Permission2的角色1 iam获得异常
< blockquote>
java.lang.IllegalStateException:正在合并同一个实体[com.persistence.entity.admin.Functionality#1]的多个表示。独立:[com.persistence.entity.admin.Functionality@4729256a];分离:[com.persistence.entity.admin.Functionality@56ed25db]
通过删除Permission实体上的CascadeType.MERGE来修复它。
I am having 3 entities with ManyToMany relationships as below:
Role Entity:
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer roleID;
private String roleName;
private String description;
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinTable(name = "role_permission", joinColumns = {@JoinColumn(name = "role_id")}, inverseJoinColumns = {@JoinColumn(name = "permission_id")})
private Set<Permission> permissions = new LinkedHashSet<Permission>();
Permission Entity:
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int permissionID;
private String permissionName;
private String description;
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinTable(name = "permission_functionality", joinColumns = {@JoinColumn(name = "permission_id")}, inverseJoinColumns = {@JoinColumn(name = "functionality_id")})
private Set<Functionality> functionalities = new LinkedHashSet<>();
Functionality Entity:
@Entity
public class Functionality {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
I did the following:
I have created 3 functionalities.
functionality1, functionality2, functionality3
Then created 2 permissions as :
a. Permission 1 with functionality1, functionality2. b. Permission 2 with functionality2, functionality3.
Then while creating a role as:
Role 1 with Permission1 and Permission2 iam getting following exception
java.lang.IllegalStateException: Multiple representations of the same entity [com.persistence.entity.admin.Functionality#1] are being merged. Detached: [com.persistence.entity.admin.Functionality@4729256a]; Detached: [com.persistence.entity.admin.Functionality@56ed25db]
Fixed it by removing CascadeType.MERGE on Permission entity
这篇关于java.lang.IllegalStateException:使用@ManyToMany 3个实体对同一个实体进行多次表示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!