Giriş
Şu satırı dahil ederiz.
Açıklaması şöyle.
Normalde bidirectional (çift yönlü) OneToMany ilişkide A tablosu, B tablosu ve A_B join tablosu üretilir. Bu durumda @JoinColumn anotasyonu name + joinColumns + inverseJoinColumns alanları doldurularak kullanılır.
Eğer unidirectional (tek yönlü) OneToMany ilişki istiyorsak yani A tablosu, B tablosu yaratılır ve B tablosuna A_ID şeklinde parent için foreign key yerleştirilir. Bu durumda @JoinColumn anotasyonu sadece name + joinColumns alanları doldurularak kullanılır. Açıklaması burada.
name Alanı
Sütun ismini belirtir.
Örnek
Unidirectional OneToMany ilişkide child tablodaki parent tabloya foreign key olan sütun ismi yazılır. Şöyle yaparız.
ManyToOne ilişkide child sınıfta şöyle yaparız. Child tablodaki parent tabloya foreign key olan sütun ismi yazılır.
ManyToOne ilişkide child sınıfta şöyle yaparız. Child tablodaki parent tabloya foreign key olan sütun ismi yazılır.
Eğer sütun ismi tanımlanmazsa şu isim kullanılır.
Yani aşağaki örnekte Address sınıfı için "field_name" address "id_column_name" ise id kabul edilir ve sütun ismi address_id olur.
referenceColumnName Alanı
Örnek
ManyToOne ilişkide child sınıfta parent tablodaki sütunu belirtmek için şöyle yaparız
Şu satırı dahil ederiz.
import javax.persistence.JoinColumn;
Açıklaması şöyle.The attributes in @JoinColumn are the names of the database table column.
ManyToOne, OneToMany, OneToOne anotasyonları ile birlikte kullanılır.The join column is declared with the @JoinColumn annotation which looks like the @Column annotation. It has one more parameters named referencedColumnName. This parameter declares the column in the targeted entity that will be used to the join. Note that when using referencedColumnName to a non primary key column, the associated class has to be Serializable. Also note that the referencedColumnName to a non primary key column has to be mapped to a property having a single column (other cases might not work).
Normalde bidirectional (çift yönlü) OneToMany ilişkide A tablosu, B tablosu ve A_B join tablosu üretilir. Bu durumda @JoinColumn anotasyonu name + joinColumns + inverseJoinColumns alanları doldurularak kullanılır.
Eğer unidirectional (tek yönlü) OneToMany ilişki istiyorsak yani A tablosu, B tablosu yaratılır ve B tablosuna A_ID şeklinde parent için foreign key yerleştirilir. Bu durumda @JoinColumn anotasyonu sadece name + joinColumns alanları doldurularak kullanılır. Açıklaması burada.
name Alanı
Sütun ismini belirtir.
Örnek
Unidirectional OneToMany ilişkide child tablodaki parent tabloya foreign key olan sütun ismi yazılır. Şöyle yaparız.
@OneToMany
@JoinColumn(name="A_ID")
private List<C> cList;
ÖrnekManyToOne ilişkide child sınıfta şöyle yaparız. Child tablodaki parent tabloya foreign key olan sütun ismi yazılır.
@ManyToOne
@JoinColumn(name="parent_fk")
private DomainObject domainObject;
ÖrnekManyToOne ilişkide child sınıfta şöyle yaparız. Child tablodaki parent tabloya foreign key olan sütun ismi yazılır.
class customer {
@Id
private Long id;
private String name;
private Company company;
}
class Company {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ownedBy")
private Company ownedBy;
}
Örnek - Sütün İsmi YoksaEğer sütun ismi tanımlanmazsa şu isim kullanılır.
<field_name>_<id_column_name>
@ManyToOne
@JoinColumn
public Address getAddress() {
return address;
}
Örnek
ManyToOne ilişkide child sınıfta parent tablodaki sütunu belirtmek için şöyle yaparız
@JoinColumn(name="domain_object_id",referenceColumnName="domain_id")
Hiç yorum yok:
Yorum Gönder