决定哪个类在Hibernate中是拥有方

问题描述 投票:1回答:1

我有“角色”类,它是用户角色的主要实体,在此表中有2个[[FK,它们分别指向两个字典:“ Privelege”和“ Unit”] >类。 所以我认为这是许多(角色)到一个(特权/单位)的关系。

问题:

  1. 我的代码中的Hibernate映射正确吗?

  2. 就我而言,哪个阶级是“拥有者”,为什么?
  3. 我应该在哪个班级写“ @JoinColumn”,在哪里写“……”?
  4. 正如我在其他文章中所读的:

    “ @ JoinColumn批注在拥有外键的类中维护。”

但是在Hibernate的文档中,我看到

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,它们分别指向两个字典:“特权”类和“单元”类。因此,对一个角色有很多(角色)...
java hibernate
1个回答
0
投票
是的,子实体拥有该关系,因为那是外键所在的一面。在@ManyToOne的情况下,此映射是最有效的。

同样的情况适用于映射为两个双向@ManyToOne的多对多关系。也可以使用@JoinTable注释来完成,但是这种方法效率较低。

© www.soinside.com 2019 - 2024. All rights reserved.