[英]Many to one relationship with @SecondaryTable on Hibernate
我正在修改遺留數據庫,我必須將一個表分成兩個。 有很多代碼引用我的實體類,所以我想使用@SecondaryTable來避免弄亂所有項目。
假設我有一個像這樣的Employee表:
+---------------+
|Employee |
|---------------+
|employee_id |(pk)(ai)
|first_name |
|last_name |
|email_personal |
|email_work |
+---------------+
但現在每個員工都可以擁有3個,4個或5個電子郵件地址,因此我們不想在Employee表中創建更多列,而是將它們帶到一個名為Email_Address的單獨表中,如下所示:
+-----------------+
|Email_Address |
|-----------------+
|email_address_id | (pk)(ai)
|employee_id | (fk)
|email_address |
|description |
+-----------------+
所以一個寄存器過去是這樣的:
+---------------+---------------+---------------+-------------------+---------------+
| employee_id | first_name | last_name | email_personal | email_work |
|---------------+---------------+---------------+-------------------+---------------+
| 1 | John | Locke | john@personal.com | john@work.com |
+---------------+---------------+---------------+-------------------+---------------+
現在是這樣的:
+---------------+---------------+---------------+
| employee_id | first_name | last_name |
|---------------+---------------+---------------+
| 1 | John | Locke |
+---------------+---------------+---------------+
+--------------------+---------------+-------------------+-------------------+
| email_address_id | employee_id | email_address | description |
|--------------------+---------------+-------------------+-------------------+
| 1 | 1 | john@personal.com | Personal |
+--------------------+---------------+-------------------+-------------------+
| 2 | 1 | john@work.com | Work |
+--------------------+---------------+-------------------+-------------------+
最后我的問題:如果我當前的實體類是這樣的話,我可以使用@SecondaryTable來解決這個問題嗎?:
@Entity
@Table(name = "Employee")
public class Employee implements java.io.Serializable {
@Id
@Column(name = "employee_id")
private Integer patientId;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email_personal")
private String emailPersonal;
@Column(name = "email_work")
private String emailWork;
.
.
.
}
@SecondaryTable僅在主要和次要之間具有一對一關系時才有效。 基本上,您聲明您的1個對象存儲在2個(或更多)表中。 它是@Embeddable的補充,表示您的2(或更多)對象存儲在1個表中。
如果您要重構遺留代碼並且不想處理從1到多個地址的所有地址實例,您可以將地址標記為“home”或“primary”,並讓“getAddress()”返回該地址或以前,它曾經做過。 您將創建另一個getter(確保將其標記為@Transient,如果您使用getter定義),名為getAllAddresses(),它將返回List或Set定義。
TL; DR - 不,@ SecondaryTable不起作用,使用@OneToMany ......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.