簡體   English   中英

與Hibernate上的@SecondaryTable有多對一的關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM