使用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(地址的子类)。

以上是 使用Hibernate / JPA逐案排除@Embedded属性中的字段 的全部内容, 来源链接: utcz.com/qa/408117.html

回到顶部