我们有一个实体Role
,它可以是用户或组。在组中,我们设置了权限。因此,用户属于一个组。另外,组可以属于其他组,即可以构成权限的层次结构。
这个想法是存储例如用户->组到单独的数据库表role_ref
中。
@Table(name = "role__parent")
@IdClass(RoleAssociationKey.class)
@Data
public class RoleAssociation implements Serializable {
@Id
@JoinColumn(name = "has_parent_role_id")
private Role node;
@Id
@JoinColumn(name = "is_parent_for_role_id")
private Role parent;
...
在EclipseLink中,我在Role
// bi-directional many-to-many association to parents of a Role
@OneToMany(mappedBy = "node", orphanRemoval = true, cascade = { CascadeType.ALL })
@JoinTable(name = "role__parent", joinColumns = {
@JoinColumn(name = "is_parent_for_role_id") }, inverseJoinColumns = {
@JoinColumn(name = "has_parent_role_id") })
private List<RoleAssociation> parentRoles;
但是Hibernate抱怨这种构造,因此我很难解决正确的定义。
mappedBy
,那么我将无法定义JoinTable
JoinTable
休眠的抱怨left and right hand sides of a binary logic operator were incompatible
mappedBy
却不知道... has the wrong number of column. should be 2
我认为主要问题在于RoleAssociation
没有自己的@Id
作为序列。密钥是两个ID的组合-两者都是必需的。如果我将其更改为其他方式,则可能会起作用。但是由于它可以在EclipseLink中工作,所以我会说它是有效的构造。
是否有一种方法可以指定它使其也可以在Hibernate中运行?