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
Leave a Reply