决定哪个类在Hibernate中是拥有方
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决定哪个类在Hibernate中是拥有方相关的知识,希望对你有一定的参考价值。
我有“角色”类,它是用户角色的主要实体,在此表中有2个[[FK,它们分别指向两个字典:“ Privelege”和“ Unit”] >类。 所以我认为这是许多(角色)到一个(特权/单位)的关系。
问题:
- 我的代码中的Hibernate映射正确吗?
- 就我而言,哪个阶级是“拥有者”,为什么?
- 我应该在哪个班级写“ @JoinColumn”,在哪里写“……”?
正如我在其他文章中所读的:
“ @ JoinColumn批注在拥有外键的类中维护。”
mappedBy
是在拥有方使用的(请参阅示例163.双向@OneToOne)。4.如果删除一些“角色”记录会怎样?如果我从词典中删除了一些记录,会影响“角色”的记录吗?我可以覆盖此行为以禁用级联吗?我假设我的“角色”类是拥有者,因为它的FK指向2个字典。因此,它拥有FK。因此,我需要在这里使用“ @JoinColumn”作为其拥有的一面,并在两个字典中使用“ mappedBy”,因为它是由拥有的一面映射的。我说得对吗?角色类
@Entity
@Table(name="ROLES_NEW", schema="MAPP")
public class Role implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "ROLENAME")
private String roleName;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "UNIT_ID")
private Unit unit;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PRIVELEGE_ID")
private Privelege privelege;
...
}
特权课程
@Entity
@Table(name="PRIVELEGES", schema="MAPP")
public class Privelege /*implements GrantedAuthority*/ {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "PRIVELEGENAME", length = 255, nullable = false)
private String privelegeName;
@Column(name = "descr", length = 255, nullable = false)
private String descr;
@OneToMany(mappedBy = "privelege")
Set<Role> role;
...
}
Unit class
@Entity
@Table(name="UNITS", schema="MAPP")
public class Unit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "UNITNAME")
private String unitname;
@OneToMany(mappedBy = "unit")
Set<Role> role;
...
}
我有“角色”类,它是用户角色的主要实体,在此表中有2个FK,它们分别指向两个字典:“特权”类和“单元”类。因此,对一个角色有很多(角色)...
答案
是的,子实体拥有该关系,因为那是外键所在的一面。在@ManyToOne
的情况下,此映射是最有效的。同样的情况适用于映射为两个双向@ManyToOne
的多对多关系。也可以使用@JoinTable
注释来完成,但是这种方法效率较低。
以上是关于决定哪个类在Hibernate中是拥有方的主要内容,如果未能解决你的问题,请参考以下文章
multitenantconnectionprovider类在哪个jar中