![](/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.