我正在将Hibernate hbm.xml文件中的某些类迁移到JPA批注。
我们有一个Address在多个地方使用的可嵌入类。每个位置使用地址中属性的不同子集。
Address
(为简便起见,省略了getter / setter)
@Embeddable public class Address { String email; String address; String city; String state; String zip; String country; } @Entity @Table(name="customer") public class Customer { @Embedded @AttributeOverrides({ @AttributeOverride(name="address", column=@Column(name="ship_addr"), @AttributeOverride(name="city", column=@Column(name="ship_city"), @AttributeOverride(name="state", column=@Column(name="ship_state"), @AttributeOverride(name="zip", column=@Column(name="ship_zip"), @AttributeOverride(name="country", column=@Column(name="ship_country") }) Address shippingAddress; @Embedded @AttributeOverrides({ @AttributeOverride(name="address", column=@Column(name="bill_addr"), @AttributeOverride(name="city", column=@Column(name="bill_city"), @AttributeOverride(name="state", column=@Column(name="bill_state"), @AttributeOverride(name="zip", column=@Column(name="bill_zip") }) Address billingAddress; }
请注意,在这个人为的示例中,shippingAddress使用Address.country,但billingAddress不使用;他们都不使用Address.email。
问题在于,Hibernate会@Column为我未明确提供的任何列推断标签。
@Column
我尝试将其添加@Transient到所有Address字段中,但似乎@AttributeOverride没有胜过@Transient。
@Transient
@AttributeOverride
有什么解决方法吗?
我认为无法通过注释“忽略”嵌入式对象中地址中的字段。
一种解决方法是创建不带电子邮件的基本类型地址,并使用字段电子邮件创建ExtendedAddress(地址的子类)。