相关疑难解决方法(0)

java.lang.IllegalStateException:具有@ManyToMany 3实体的同一实体的多个表示形式

我有3个具有ManyToMany关系的实体,如下所示:

角色实体:

@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>();
}
Run Code Online (Sandbox Code Playgroud)

许可实体:

@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 = …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa ejb-3.0 jpa-2.0

29
推荐指数
6
解决办法
5万
查看次数

如果从数据库加载两次,hibernate 是否加载同一个实例的两个单独副本?

我知道关于延迟加载的 SO 有很多不同的问题,但我的问题有点不同。

假设我有一个实体 A,其中我有实体 B 的集合。同样,在实体 B 中,我有 A 的集合。在这两种情况下,都使用了 lazy="true" 选项。

实体 A的实例 aA 具有 --> Set<B>===(此集合包含实体 B 的实例 bB)

实体 B的实例 bB 具有 --> Set<A>===(此集合包含实体 A 的实例 aA)

现在,如果我加载实体 A 的集合(即Set<B>)。它现在已初始化,即完成 A 的 aA 实例,包括集合。我现在期望的是实体 B 的实例 bB 也已完全初始化但不,它没有,当我引用具有实体 A 实例 aA 的实体 B 的集合时,我得到了延迟初始化异常。

如果从数据库加载两次,hibernate 是否加载同一个实例的两个单独副本?如果是这样,有没有办法同步会话中所有副本的更改?

希望我足够清楚并且没有用乱七八糟的信息把事情搞砸:)

java hibernate

4
推荐指数
1
解决办法
3716
查看次数

标签 统计

hibernate ×2

java ×2

ejb-3.0 ×1

jpa ×1

jpa-2.0 ×1