一尘不染

休眠映射:子对象属性上的OneToMany和OneToOne

hibernate

这是父类Enterprise。它有雇主,其中一位是企业总裁。

@Entity
class Enterprise
{
   // fields

   @OneToMany
   public List<Employee> getEmployers()
   // implementation

   @OneToOne
   public Employee getPresident()
   // implementation

}

这是子雇员类。它仅提供有关Enterprise的信息。但是问题是我应该使用哪种关联?

@Entity
class Employee 
{
   // fields

   // what association should I use?
   public Enterprise getEnterprise()
   // implementation
}

阅读 236

收藏
2020-06-20

共1个答案

一尘不染

假设您已使用定义了Enterprise-> Employers关联@OneToMany,这意味着an
Employer仅属于一个Enterprise,则应使用@ManyToOne,意味着每个都Employer属于max。1
Enterprise,但是Enterprise可以参考很多Employers

您可以使用mapped-by注释中的属性仅在一侧之一中定义关联细节(连接列等):

@Entity
class Enterprise
{
   @OneToMany(mapped-by="enterprise")
   public List<Employee> getEmployers()
   // implementation

   @OneToOne
   public Employee getPresident()
   // implementation
}

@Entity
class Employee 
{
   @ManyToOne
   @JoinTable ( name="Enterprise", joinColumns={ @JoinColumn(name="ENT_ID", referencedColumnName="ENT_ID") }
   public Enterprise getEnterprise()
   // implementation
}

在情况下Employer可能是一个不同的总裁Enterprise,他采用(似乎不太可能,除非你可以是一个企业的总裁,而不被它采用的),并且如果你需要访问Enterprise它的Employer是总统从Employer实体,您可能需要添加另一个关联,理想情况下是这样@OneToOne(您会遇到问题,因为@OneToOne关系要求两个实体都具有相同的@Id类)。在这种情况下,出于实际原因,我将使用注释该getPresidedEnterprise()方法。Employer``@ManyToOne

2020-06-20