java.lang.IllegalStateException:使用@ManyToMany 3个实体对同一个实体进行多次表示 [英] java.lang.IllegalStateException: Multiple representations of the same entity with @ManyToMany 3 entities

查看:473
本文介绍了java.lang.IllegalStateException:使用@ManyToMany 3个实体对同一个实体进行多次表示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



角色实体:

  @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;
私人字符串名称;

我做了以下操作:


  1. 我创建了3个功能。

     功能1,功能2,功能3 


  2. 然后创建2个权限为:

      a。权限1与功能1,功能2。 

    b。权限2与功能2,功能3。


  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:

  1. I have created 3 functionalities.

    functionality1, functionality2, functionality3
    

  2. Then created 2 permissions as :

    a. Permission 1 with functionality1, functionality2.
    
    b. Permission 2 with functionality2, functionality3.
    

  3. 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆