java - JPA 多个嵌入式字段

标签 java hibernate jpa jakarta-ee

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

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

    @Embedded
    public Address work;
}

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

在这种情况下,Person 可以包含两个 Address 实例 - 家庭和工作。我将 JPA 与 Hibernate 的实现一起使用。当我使用 Hibernate Tools 生成架构时,它只嵌入了一个 Address。我想要的是两个嵌入的 Address 实例,每个实例的列名都有区别或前缀有一些前缀(例如 home 和 work)。我知道 @AttributeOverrides,但这需要单独覆盖每个属性。如果嵌入对象(Address)变得很大,这可能会变得很麻烦,因为每个列都需要单独覆盖。

最佳答案

通用的 JPA 方法是使用 @AttributeOverride。这应该适用于 EclipseLink 和 Hibernate。

@Entity 
public class Person {
  @AttributeOverrides({
    @AttributeOverride(name="street",column=@Column(name="homeStreet")),
    ...
  })
  @Embedded public Address home;

  @AttributeOverrides({
    @AttributeOverride(name="street",column=@Column(name="workStreet")),
    ...
  })
  @Embedded public Address work;
  }

  @Embeddable public class Address {
    @Basic public String street;
    ...
  }
}

关于java - JPA 多个嵌入式字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/331744/

相关文章:

java - 连接丢失后自动重新连接 JPA EntityManager

java - hibernate/Java : retrieving primary key always returns zero

java - Spring+Hibernate+Cassandra的组合如何运行

hibernate - 我可以为 @Entity 定义默认顺序吗?

jpa - OpenJPA 架构配置

java - Paypal Sandbox 交易未显示

java - 为通用类编写单元测试......最好的方法?

java - 程序不会在前一次排序后对数组进行排序

java - 如何以编程方式验证 JPQL(JPA 查询)

java - 如何打开特定java进程的控制台