使用Hibernate / JPA逐个排除@Embedded属性中的字段
问题内容:
我正在将Hibernate hbm.xml文件中的某些类迁移到JPA批注。
我们有一个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
为我未明确提供的任何列推断标签。
我尝试将其添加@Transient
到所有Address
字段中,但似乎@AttributeOverride
没有胜过@Transient
。
有什么解决方法吗?
问题答案:
我认为注释无法通过嵌入对象中的地址“忽略”字段。
一种解决方法是创建不带电子邮件的基本类型地址,并使用字段电子邮件创建ExtendedAddress(地址的子类)。