【发布时间】:2020-03-18 08:32:46
【问题描述】:
我有Role 类,它是用户角色的主要实体,该表中有2 个FK,它们分别指向两个字典:Privelege 和Unit 类。
所以我认为这是多 (Role) 对一 (Privelege/Unit) 关系。
问题:
Hibernate 在我的代码中的映射是否正确?
在我的情况下,哪个类是“拥有方”,为什么?
我应该在哪个班级写
@JoinColumn,在哪里写mappedBy?
正如我在其他帖子中所读到的:“@JoinColumn 注释在拥有外键的类中维护。”
但在 Hibernate 的文档中,我看到 mappedBy 用于拥有方(参见示例 163。双向 @OneToOne)。
4. 如果我删除了一些Role 记录会怎样?如果我从字典中删除一些记录会影响Role 的记录吗?我可以覆盖此行为以禁用级联吗?
我假设我的“角色”类是拥有方,因为它的 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;
...
}
单元类
@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;
...
}
【问题讨论】:
标签: java hibernate oop jpa set