一尘不染

JPA多个嵌入式字段

hibernate

JPA实体类是否可以包含两个嵌入式(@Embedded)字段?一个例子是:

@Entity
public class Person {
    @Embedded
    public Address home;

    @Embedded
    public Address work;
}

public class Address {
    public String street;
    ...
}

在这种情况下,a Person可以包含两个Address实例-家庭和工作。我在Hibernate的实现中使用JPA。当我使用Hibernate
Tools生成架构时,它仅嵌入一个Address。我想要的是两个嵌入式Address实例,每个实例的列名都经过区分或在前面加上一些前缀(例如home和work)。我知道@AttributeOverrides,但是这要求每个属性都应单独覆盖。如果嵌入的对象(Address)变大,那么这会变得很麻烦,因为每个列都需要单独重写。


阅读 312

收藏
2020-06-20

共1个答案

一尘不染

如果要在同一实体中具有两次相同的可嵌入对象类型,则默认使用列名将无效:至少其中一列必须是显式的。Hibernate超越了EJB3规范,并允许您通过NamingStrategy增强默认机制。DefaultComponentSafeNamingStrategy是对默认EJB3NamingStrategy的一个小改进,该默认EJB3NamingStrategy允许即使在同一实体中使用两次,也默认使用嵌入式对象。

从Hibernate Annotations
Doc:http
:
//docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e714

2020-06-20