我有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) 我知道关于延迟加载的 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 是否加载同一个实例的两个单独副本?如果是这样,有没有办法同步会话中所有副本的更改?
希望我足够清楚并且没有用乱七八糟的信息把事情搞砸:)