![](/img/trans.png)
[英]Overriding OneToOne with OneToMany Mapping in Hibernate Child Class
[英]Hibernate mapping: OneToMany and OneToOne on child object property
这是父类Enterprise。 它有雇主,其中一个是企业总裁。
@Entity
class Enterprise
{
// fields
@OneToMany
public List<Employee> getEmployers()
// implementation
@OneToOne
public Employee getPresident()
// implementation
}
这是子Employee类。 它只有关于他工作的企业的信息。 但问题是我应该使用哪种关联?
@Entity
class Employee
{
// fields
// what association should I use?
public Enterprise getEnterprise()
// implementation
}
鉴于您已经与@OneToMany
定义了Enterprise
- > Employers
关系,这意味着Employer
只属于一个Enterprise
,您应该使用@ManyToOne
,这意味着每个Employer
属于最大。 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
总裁(似乎不太可能,除非一个企业的总裁没有受雇于他),以及如果您需要访问Employer
担任总裁的Enterprise
从Employer
实体中,您需要添加另一个关联,理想情况下是@OneToOne
(您会遇到问题,因为@OneToOne关系要求两个实体具有相同的@Id类)。 在这种情况下,我会注释getPresidedEnterprise()
的方法, Employer
与@ManyToOne
实际的原因。
使用@ManyToOne
注释。 这是一对多关系的另一面。 它说员工可以拥有一个企业,但企业可以拥有许多员工。
您应该在Employee类上有两个属性。 员工表应该引用一个企业,广告企业应该引用一个员工总统。
(您也可能基于isPresident标志列对Employee进行子类化,但我没有相关经验)
@Entity
class Enterprise
{
// fields
@OneToMany(mappedBy="enterprise")
public List<Employee> getEmployees(){}
@OneToOne
@JoinColumn(name="PRESIDENT_ID")
public Employee getPresident(){}
}
@Entity
class Employee
{
// fields
@ManyToOne
@JoinColumn(name="ENTERPRISE_ID")
public Enterprise getEnterprise(){}
@OneToOne(mappedBy="President")
public Enterprise getMyEnterprise(){}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.