17 Ekim 2018 Çarşamba

JPA @AssociationOverride Anotasyonu

Giriş
@Embedded olarak işaretli sınıfın içinde halihazırda ManyToOne gibi bir ilişki olsun. Bu @Embedded sınıfı bir başka sınıf içinde tekrar kullanmak isteyelim. Bu durumda ilişkiyi tekrar tanımlamak gerekir.

name Alanı
@Embeddable içindeki field name ile aynı olmak zorundadır.

Örnek
Elimizde şöyle bir kod olsun. Bu kod 3 tablo yaratır. A tablosu, C tablosu ve A_C için join tablosu
@Entity
public class A {
  @Id
  @GeneratedValue
  private Long id;

  @Embedded
  private B b;

  //getters and setters
}

@Embeddable
public class B {
  @OneToMany
  private List<C> cList;
  //getters and setters
}

@Entity
public class C {
  @Id
  @GeneratedValue
  private Long id;
  //other fields, getters and setters
}
Eğer join tablosu istemezsek B sınıfını şöyle yaparız. Bu durumda C tablosuna A_ID sütunu eklenir.
@OneToMany
@JoinColumn(name="A_ID")
private List<C> cList;
Eğer C tablosundaki bu sütunun ismini değiştirmek istersek A sınıfına şöyle yaparız.
@AssociationOverride(name= "cList",
        joinColumns = @JoinColumn(name="SOME_NAME_FOR_JOIN_COLUMN_IN_TABLE_C"))
@Embedded
private B b;

Hiç yorum yok:

Yorum Gönder