15 Ekim 2018 Pazartesi

JPA @AttributeOverrides Anotasyonu

Giriş
@Embeddable ile çok kullanılan bir diğer anotasyon ise AttributeOverrides. Bu anotasyon ile nesnenin başka bir yerde tanımlanmış özelliği değiştiriliyor.
Örnek
Aşağıdaki kodda Address için farklı sütun isimleri kullanılıyor.
@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;
}
Örnek
Eğer iç içe iki @Embedded varsa alan isimlerini nokta ile ayırmak gerekir. Şöyle yaparız.
@Embedded   
@AttributeOverrides( {
  @AttributeOverride(name="coveredByGrant.amount",
                     column = @Column(name="contracted_coveredByGrant") ),
  @AttributeOverride(name="foundedFromOwnResources.amount",
                     column = @Column(name="contracted_foundedFromOwnResources")),
  @AttributeOverride(name="personalContribution.amount",
                     column = @Column(name="contracted_personalContribution"))
} )
private ReportCostValues contracted;

Hiç yorum yok:

Yorum Gönder