JPA实体类是否可以包含两个嵌入式(@Embedded)字段?一个例子是:
@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)变大,那么这会变得很麻烦,因为每个列都需要单独重写。
Person
Address
@AttributeOverrides
如果要在同一实体中具有两次相同的可嵌入对象类型,则默认使用列名将无效:至少其中一列必须是显式的。Hibernate超越了EJB3规范,并允许您通过NamingStrategy增强默认机制。DefaultComponentSafeNamingStrategy是对默认EJB3NamingStrategy的一个小改进,该默认EJB3NamingStrategy允许即使在同一实体中使用两次,也默认使用嵌入式对象。
从Hibernate Annotations Doc:http : //docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e714