İyi günler Hibernate öğrenmeye çalışıyorum. OneToMany bağlantısıyla uğraşırken şöyle birşeyke karışılaştım. 2 sınıfım var aralarında OnetoMany ilişkisi var kodlar şu şekilde

@Entity public class Adres {
       @Id
       @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String adres;
    private String sehir;
//Getter ve Setterlar

@Entity
public class Ogrenci {
        @Id
       @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String ogrenci_Adi;
    private String ogrenci_Soyadi;
    private int ogrenci_Yasi;
       @ManyToOne(cascade=CascadeType.ALL)
    private Adres adres;

Böyle yapınca veritabanında 2 tablo oluşuyor ve Ogrenci Tablosunda adres_id diye bi sütün oluşuyor Adres bilgileri orda saklanıyor bunda sorun yok şimdi diğerini anlatayım

@Entity
public class Ders {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String Adi;
        @OneToMany(cascade=CascadeType.ALL)
    private List<Ogr> Ogrler;

@Entity
public class Ogr {  
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String Adi;
    private String Soyadı;

Böyle yapınca ise ders_ogr diye 3 bi tablo oluşuyor bağlantı bilgileri bu tabloda saklanıyor. sorum şu kisinden hangisi doğru ? yada doğru olan yol bunlardan birimi :D Kolay gelsin Teşekkürler şimdiden

soruldu: 13 Ağu '15, 13:02

ahmethmo's gravatar image

ahmethmo
120101521
cevap kabul oranı: 50%

değiştirildi: 14 Ağu '15, 07:07

CemIkta's gravatar image

CemIkta ♦
19.9k29125190


Iliskisel veritabanlarinda (RDBMS) Table iliskileri tanimlamanin degisik yollari var: Iki Table arasinda iliski (Relation) tanimlarken Join Column veya Join Table yapabilirsin. Join Column bir Foreign Key ile tanimlanirken, Join Table ucuncu bir Table ile tanimlanir.

Yukaridaki verdiginiz kodlamalarin ilki Ogrenci Table'inde Adres icin (Adres icindeki id alani) bir Foreign Key tanimlar (Join Column), digeri ise Join Table yaparak iliskilerin tutulacagi ucuncu bir capraz Table tanimlar. Bu capraz table ogrenci_id ve ders_id'leri tutar.

Normal durumlarda Join Column kullanmak veritabani performasi acisindan daha avantajlidir, Join Table yapisinda her zaman ucuncu bir Table islemi yaparsiniz ki bu veritabaninda daha az performansli calisir.

Asagidaki ornek kodlamada OneToMany ve ManyToOne tanimlari daha optimal gorulebilir.

// musteri entity
@Entity
@Table(name = "customer")
public class Customer extends BaseEntity {
    // ... diger alanlar 
    @JoinColumn(name = "category_id", referencedColumnName = "category_id", nullable = false)
    @ManyToOne(optional = false)
    private Category category;

// getters setters
}

// kategori entity
@Entity
@Table(name = "category")
public class Category extends BaseEntity {
    // ... diger alanlar 
    @OneToMany(mappedBy = "category")
    private List<customer> customerList;

// getters setters
}

Class'larin detaylarina Örnek Demo programinda bakabilirsiniz.

permanent link

cevaplandı: 14 Ağu '15, 07:25

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×109
×86
×3

Soruldu: 13 Ağu '15, 13:02

Görüntüleme: 482 kez

Son güncelleme: 14 Ağu '15, 07:25

powered by BitNami OSQA