Hibernate Ders 06 – @OneToMany Association

Merhaba Arkadaslar,
Bu dersimizde Hibernate ‘te one-to-many ile ilgili basit bir ornek yapmaya calisacagiz. (ornegimizde universite ogrencisi ve universite arasinda one-to-many iliskisi kurmaya calisacagiz). Bir onceki dersimizde one-to-one iliski ile ilgili bir ornek yapmistik.

one-to-many iliskide dusunelim ki 1 kisinin birden fazla mail adresi olabilir ama bir mail adresi sadece bir kisiye ait olabilir tekildir.

Daha onceki orneklerimizde oldugu gibi projemizde yeni bir paket aciyoruz ismine hibernate6_one2many_association diyoruz.

Uni_Student isimli sinifimizi olusturalim, her zamanki gibi @Entity ve id icin gerekli notasyonlari verelim.

    private int studentId;
    private String studentName;
    private String studentSurname;

Bu ornegimizde yapilandirici kullanalim. Netbeans bizim icin yapilandiricilari da kolayca olusturuyor. Kod ekraninda sag tiklayip Insert Code ( alt+insert ) , Constructor.. diyelim.
Id yi generate etme isini daha onceki yazilarimizda belirtigimiz gibi  @GeneratedValue(strategy = GenerationType.AUTO) notasyonu ile otomatige bagliyoruz 🙂
Dolayisiyla yapilandirimiz  id parametresini almayacak;

    public Uni_Student( String studentName, String studentSurname) {
        this.studentName = studentName;
        this.studentSurname = studentSurname;
    }

tabi bu yapilandirici olusturunca Netbeans bizden default constructor i olusturmamizi isteyecek.Bu islemi de Netbeanse birakabiliriz.
Simdilik buradaki isimiz bitti.

Sirada ikinci sinifimiz var !

University adinda yeni bir sinif olusturalim,

    private int universityId;
    private String universityName;
    private String faculty;
    private String department;

Gerekli notasyonlari yaptiktan sonra, bu sinif icin de constructorlarimizi olusturalim.

    public University(String universityName, String faculty, String department) {
        this.universityName = universityName;
        this.faculty = faculty;
        this.department = department;
    }

Bu ornegimizde “One” tarafi Uni_Student , “Many” tarafi ise University olacak. Bu iliskiye gore gerekli notasyonlari yapacagiz. Oncelikle University sinifimizda Java nin Set(kume) koleksiyonundan yararlanacagiz.

private Set<Uni_Student> studentRecord= new HashSet<>();

studentRecord isimli degiskenimizi bir set , yani kumede tutacagiz.
Burada set yerine List-ArrayList gibi diger Collectionlardan da yararlanabilirdik.

studentRecord  degiskenimizin getter/setterlarini olusturuyoruz.ve @OneToMany notasyonunu veriyoruz.

    @OneToMany(cascade= CascadeType.ALL)
    public Set<Uni_Student> getStudentRecord() {
        return studentRecord;
    }

ve sirada Uni_Student sinifimiz var.

private University university;

degiskenini ekleyip getter/setter olusturduktan sonra @ManyToOne notasyonunu ekleyelim.

    @ManyToOne(cascade= CascadeType.ALL)
    public University getUniversity() {
        return university;
    }

Sirada test sinifimiz var !

package hibernate6_one2many_association;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
*
* @author Levent
*/
public class UniversityTest {

public static void main(String[] args) {
AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(Uni_Student.class);
config.addAnnotatedClass(University.class);
config.configure("hibernate.cfg.xml");

new SchemaExport(config).create(true, true);

University university1 = new University("Kocaeli University", "Engineering Faculty", "Computer Dept.");

Uni_Student uni_student1 = new Uni_Student("Levent", "Erguder");
Uni_Student uni_student2 = new Uni_Student("Burak", "Okumus");

university1.getStudentRecord().add(uni_student1);
university1.getStudentRecord().add(uni_student2);

uni_student1.setUniversity(university1);
uni_student2.setUniversity(university1);
SessionFactory factory = config.buildSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();

session.save(university1);
//session.save(uni_student1);
//session.save(uni_student2);

session.getTransaction().commit();

}
}

Projemizi calistiralim ve sonuclari gorelim..

uni_student tablomuz…

university tablomuz…

university_uni_student tablomuz…

university_uni_student isimli tablomuuz inceledigimizde iki tablomuzun id degerlerini tuttugunu gorebiliriz.Kodumuza son olarak soyle bir degisiklik yapalim ve buradaki degisken isimlerini ve tablomuzun adini degistirelim..

    @OneToMany(cascade= CascadeType.ALL)
    @JoinTable(name = "newTable", joinColumns =
    @JoinColumn(name = "new_id"),
    inverseJoinColumns =
    @JoinColumn(name = "new_id2"))
    public Set<Uni_Student> getStudentRecord() {
        return studentRecord;
    }

Gordugunuz gibi alanlarin ismini degistirdik.
Son olarak eger islemler sirasinda hata aliyorsak, once tablolarimizi silelim ve tekrar calistiralim.

Uni_Student.java

package hibernate6_one2many_association;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

/**
 *
 * @author Levent
 */
@Entity
public class Uni_Student implements Serializable {

    private int studentId;
    private String studentName;
    private String studentSurname;

    private University university;

    public Uni_Student() {
    }

    public Uni_Student(String studentName, String studentSurname) {
        this.studentName = studentName;
        this.studentSurname = studentSurname;
    }

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentSurname() {
        return studentSurname;
    }

    public void setStudentSurname(String studentSurname) {
        this.studentSurname = studentSurname;
    }

    @ManyToOne(cascade= CascadeType.ALL)
    public University getUniversity() {
        return university;
    }

    public void setUniversity(University university) {
        this.university = university;
    }

}

University.java

package hibernate6_one2many_association;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;

/**
 *
 * @author Levent
 */
@Entity
public class University implements Serializable {

    private int universityId;
    private String universityName;
    private String faculty;
    private String department;

    private Set studentRecord= new HashSet();

    public University() {
    }

    public University(String universityName, String faculty, String department) {
        this.universityName = universityName;
        this.faculty = faculty;
        this.department = department;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getUniversityId() {
        return universityId;
    }

    public void setUniversityId(int universityId) {
        this.universityId = universityId;
    }

    public String getUniversityName() {
        return universityName;
    }

    public void setUniversityName(String universityName) {
        this.universityName = universityName;
    }

    public String getFaculty() {
        return faculty;
    }

    public void setFaculty(String faculty) {
        this.faculty = faculty;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @OneToMany(cascade= CascadeType.ALL)
    @JoinTable(name = "newTable", joinColumns =
    @JoinColumn(name = "new_id"),
    inverseJoinColumns =
    @JoinColumn(name = "new_id2"))
    public Set getStudentRecord() {
        return studentRecord;
    }

    public void setStudentRecord(Set studentRecord) {
        this.studentRecord = studentRecord;
    }

}

Yazimizin burada sonuna geliyoruz. Bir sonraki yazimizda gorusmek uzere 🙂
Kaynak kodlar :  HibernateTutorial_V6

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *