gpt4 book ai didi

java - 如何对具有多个地址的用户进行建模?

转载 作者:行者123 更新时间:2023-12-01 13:39:51 25 4
gpt4 key购买 nike

我有一个用户实体。每个用户可以有一个或多个个人地址。根据Hibernate documentation for mapping embeddable collections应该这样做:

@Entity
public class User {
[...]
public String getLastname() { ...}

@ElementCollection
@CollectionTable(name="Addresses", joinColumns=@JoinColumn(name="user_id"))
@AttributeOverrides({
@AttributeOverride(name="street1", column=@Column(name="fld_street"))
})
public Set<Address> getAddresses() { ... }
}

@Embeddable
public class Address {
public String getStreet1() {...}
[...]
}

现在,如果我希望用户也拥有工作地址集合,我该怎么办?

这是我的想法:

  1. 为工作地址和个人地址创建 2 个不同的集合,然后将它们映射到 2 个不同的表中。(听起来事情过于复杂,因为两个地址完全相同)
  2. 将两个地址存储到同一个表中。(但是,我不知道如何区分它们)
  3. 引入一个查找实体/值对象,并以某种方式使用它来区分个人地址和工作地址。(从数据库的角度来看,我们将有一个通过地址表的外键,但我不知道如何使用 Hibernate 在域本身中对其进行建模)

非常欢迎替代方法。

最佳答案

尝试使用 hibernate single table inheritance mapping :

@Entity
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="addresstype",
discriminatorType= DiscriminatorType.STRING)
public abstract class Address {
... common attributes here
}

@Entity
@DiscriminatorValue("home")
public class HomeAddress extends Address {
...

}

@Entity
@DiscriminatorValue("work")
public class WorkAddress extends Address {
...

}

然后创建两个集合,一个用于家庭地址,另一个用于工作地址。

如果存在仅对家庭地址有效的代码,那么我们使用 HomeAddress 类型,如果存在仅对工作地址有效的代码,我们使用 WorkAddress 类型。

如果存在对两种地址类型均有效的代码,则我们使用 Address 父类(super class)型。

关于java - 如何对具有多个地址的用户进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925090/

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