Исключая поля из @Embedded свойств на индивидуальной основе с Hibernate/JPA

Я мигрирую некоторые классы в Hibernate hbm.xml файле в JPA аннотации.

У нас есть встроенный класс Address, который используется в нескольких местах. Каждое место использует разное подмножество свойств в Address.

(getters/setters omitted for brevity)

@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.

Есть ли какой-нибудь обходной путь для этого?

15
задан qualidafial 10 August 2011 в 19:10
поделиться