我有一个用户实体。每个用户可以拥有一个或多个个人地址。根据{{3}},这是应该如何做的:
@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() {...}
[...]
}
现在,如果我希望用户也有工作地址的集合,我该怎么办?
以下是我的想法:
非常欢迎替代方法。
答案 0 :(得分:1)
尝试使用休眠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超类型。