I have 3 entities with ManyToMany relationships:
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:
Permission1 with Functionality1, Functionality2 Permission2 with Functionality2, Functionality3
Then created a role:
Role1 with Permission1 and Permission2
I am getting the 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]
Advertisement
Answer
Fixed it by removing CascadeType.MERGE on Permission entity