Я переношу некоторые классы в файле hibm.xml Hibernate на аннотации JPA.
У нас есть вложенный класс Address
, который используется в нескольких местах. Каждое место использует другое подмножество свойств в адресе.
(геттеры/сеттеры опущены для краткости)
@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", [email protected](name="ship_addr"),
@AttributeOverride(name="city", [email protected](name="ship_city"),
@AttributeOverride(name="state", [email protected](name="ship_state"),
@AttributeOverride(name="zip", [email protected](name="ship_zip"),
@AttributeOverride(name="country", [email protected](name="ship_country")
})
Address shippingAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="address", [email protected](name="bill_addr"),
@AttributeOverride(name="city", [email protected](name="bill_city"),
@AttributeOverride(name="state", [email protected](name="bill_state"),
@AttributeOverride(name="zip", [email protected](name="bill_zip")
})
Address billingAddress;
}
Обратите внимание, что в этом надуманном примере shippingAddress использует Address.country, но billingAddress не работает; и ни один из них не использует Address.email.
Проблема в том, что Hibernate выводит теги @Column
для любого столбца, где я явно не предоставил его.
Я попробовал добавить @Transient
ко всем полям Address
, но кажется, что @AttributeOverride
не trump @Transient
.
Есть ли какое-либо обходное решение для этого?