gpt4 book ai didi

java - Hibernate 上与 @SecondaryTable 的多对一关系

转载 作者:行者123 更新时间:2023-12-02 06:18:05 26 4
gpt4 key购买 nike

我正在修改旧数据库,并且必须将一个表分成两个表。有很多代码引用我的实体类,因此我想使用 @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 的补充,@Embeddable 表明您的 2 个(或更多)对象存储在 1 个表中。

如果您正在重构遗留代码并且不想处理所有地址从 1 变为多个的实例,您可以将地址标记为“home”或“primary”,并让“getAddress()”返回那个家庭或小学,它曾经做过。您将创建另一个名为 getAllAddresses() 的 getter(如果使用 getter 定义,请确保将其标记为 @Transient),它将返回定义的 List 或 Set。

TL;DR - 不,@SecondaryTable 不起作用,请使用 @OneToMany...

关于java - Hibernate 上与 @SecondaryTable 的多对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com