gpt4 book ai didi

java - Hibernate:为两个不同的类映射相同的列

转载 作者:行者123 更新时间:2023-11-30 09:16:36 25 4
gpt4 key购买 nike

我正在处理遗留系统,它没有适当的单元测试,也没有任何单元测试,所以我需要非常小心我在系统中所做的任何更改。

我的基本场景是:我得到一个与 Address 有 ManyToOne 关系的 Person,我无法改变这种关系。但要知道地址有多种类型,例如:账单地址和邮寄地址。

public class Person {

@Id
@Column(name = "PERSON_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@Column(name = "PERSON_NAME")
private String personName;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ADDRESS_ID")
private Address address;

getters and setters

地址类

public class Address {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "ADDRESS_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "STREET_1_NAME")
private String street1Name;

@Column(name = "STREET_2_NAME")
private String street2Name;

getters and setters

我正在考虑将 ADDRESS_TYPE 列添加到 ADDRESS 表中,但我正在为如何实现它而苦苦挣扎。我只想拥有一个 Address 类型的新属性 postalAddress,并像 getPostalAddress 一样简单地获取 postalAddress。

最佳答案

谢谢 Alan,你的建议很有帮助,但由于与遗留代码的兼容性,我最终使用了 InheritanceType。

我的地址类现在看起来像:

@Entity
@Table(name = "ADDRESS")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="ADDRESS_TYPE",
discriminatorType=DiscriminatorType.INTEGER
)
@DiscriminatorValue("null")

public class Address {

我的 PostalAddress 看起来像:

@Entity
@Table(name = "ADDRESS")
@DiscriminatorValue(value="2")
public class PostalAddress extends Address {

private static final long serialVersionUID = 1L;

@ManyToOne
@JoinColumn(name = "INSURED_ID")
private Insured insured;

public void setInsured(Insured insured) {
this.insured = insured;
}

public Insured getInsured() {
return insured;
}

}

因此,对于过去插入的那些没有类型的地址,我假设 null 并且为了兼容性,新地址也将为“null”,只是 PostalAddress 将为“2”。

我的 Person 类看起来像

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ADDRESS_ID")
private Address address;

@Transient
private PostalAddress postalAddress;

我知道这听起来很奇怪,但有人要求我建立关系 Person 1 - N PostalAddress。

关于java - Hibernate:为两个不同的类映射相同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19386727/

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