Pet*_*ete 4 annotations many-to-many jpa
我想实现一个角色层次结构,但对于JPA Annotations来说却是新手.
我有一个带有名称和id的角色实体(隐式通道AbstractPersistable):
@Entity
@Table(name="role")
public class Role extends AbstractPersistable<Long> {
private static final long serialVersionUID = 8127092070228048914L;
private String name;
Run Code Online (Sandbox Code Playgroud)
现在我希望能够定义以下关系:
我如何使用Hibernate注释做到这一点?我可以在角色实体中定义它
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable( name = "role_hierarchy",
joinColumns = { @JoinColumn(name = "role_id")},
inverseJoinColumns={@JoinColumn(name="child_role_id")})
private List<Role> roles;
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable( name = "role_hierarchy",
joinColumns = { @JoinColumn(name = "child_role_id")},
inverseJoinColumns={@JoinColumn(name="role_id")})
private List<Role> children;
Run Code Online (Sandbox Code Playgroud)
我是在正确的轨道上吗?我错过了什么?
非常感谢你的帮助!
编辑: - 删除,因为它已被解决 -
编辑2:
看起来我的应用程序堆栈中有一些错误.在模型定义级别上,role_hierarchy工作正常,所以不要介意编辑1 ...
但是:两种方式似乎都有效(即创建m:n表条目,级联删除和检索实体的父级和子级):
mappedBy属性的双方定义连接列@ManyToMany有什么不同?有关系吗?
axt*_*avt 14
双向关系包括拥有和反向.
在您自己的方面,您声明关系的物理属性:
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "role_hierarchy",
joinColumns = { @JoinColumn(name = "role_id")},
inverseJoinColumns={@JoinColumn(name="child_role_id")})
private List<Role> roles;
Run Code Online (Sandbox Code Playgroud)
在反面,您指向具有mappedBy属性的相应拥有方:
@ManyToMany(cascade = CascadeType.MERGE, mappedBy = "roles")
private List<Role> children;
Run Code Online (Sandbox Code Playgroud)
对于多对多关系而言,哪一方是拥有方无关紧要(只要您一致地修改双方,因为只有拥有方的更改才会传播到数据库).
也可以看看:
| 归档时间: |
|
| 查看次数: |
8512 次 |
| 最近记录: |