Relasi “One to Many” di Hibernate
Paulus Ganesha Aryo Prakoso Sering ditanyakan oleh team saya. Bagaimana membuat relasi One to Many di Hibernate? Saya akan memberi penjelasan tersebut agar mereka dapat mengerti. Nanti akan mudah mengerjakan proyek.
Contoh kasus training:
- Student: Peserta training telah didaftarkan di training.
- Course: Kursus yang akan disediakan di training.
- Di training punya beberapa course yaitu Java, PHP, ASP.net, dan sebagainya.
- Student bisa mengambil salah satu atau lebih dari satu course.

Isi records di table masing-masing. Ini digunakan dengan PostgreSQL:

Untuk membuat table STUDENT, COURSE, STUDENT_COURSE di file Java Class.
Buatkan kelas Student.java:
@Entity @Table(name = "T_STUDENT") public class Student { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "student_id") private Long studentId; @Column(name = "student_name", nullable = false, length = 50) private String studentName; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinTable( name = "T_STUDENT_COURSE", joinColumns = {@JoinColumn(name = "student_id")}, inverseJoinColumns = {@JoinColumn(name = "course_id")}) private Set<Course> courses = new HashSet<Course>(0); // setter and getter }
Buatkan kelas Course.java:
@Entity @Table(name = "T_COURSE") public class Course { @Id @GeneratedValue @Column(name = "course_id") private Long courseId; @Column(name = "course_name", nullable = false) private String courseName; // setter and getter }
Buatkan kelas StudentCourse.java:
@Entity @Table(name = "T_STUDENT_COURSE") public class StudentCourse { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "student_course_id") private Long id; @Column(name = "last_updated") private Date lastUpdated; private boolean active = false; @ManyToOne @JoinColumn(name = "student_id") private Student student; @ManyToOne @JoinColumn(name = "course_id") private Course course; // setter and getter }
Membuat implement Data Access Object (DAO) dan Service dulu yaitu StudentDao dan TrainingService. Di sini tidak bahas tersebut. Kalian bisa lihat bagaimana membuat Generic Dao dengan Spring dan Hibernate.
Untuk melakukan save object STUDENT yang punya beberapa COURSE telah ditentukan.
Student student = new Student(); student.setStudentName("Kiki"); trainingService.save(student); StudentCourse studentCourse = new StudentCourse(); studentCourse.setStudent(student); studentCourse.setCourse(trainingService.getCourseById(200L)); // ambil data course telah ada di DB studentCourse.setActive(true); studentCourse.setLastUpdated(new Date()); trainingService.save(studentCourse); studentCourse = new StudentCourse(); studentCourse.setStudent(student); studentCourse.setCourse(trainingService.getCourseById(300L)); // ambil data course telah ada di DB studentCourse.setActive(false); studentCourse.setLastUpdated(new Date()); trainingService.save(studentCourse);
Ini semoga dapat bermanfaat bagi team saya dan kalian juga masih belajar. Selamat mencoba!
Baca lain juga:
Posted in Programming


December 6th, 2010 at 9:12 am
Thx banget bro untuk tutorialnya
Skalian relasi ManyToMany donk ^^
December 8th, 2010 at 11:57 am
Iya sama2 .. sip ..
January 6th, 2011 at 8:52 am
Wah, bagus sekali.. Terimakasih ya. Salam kenal..
February 5th, 2011 at 7:17 pm
Hai medison, ya makasih… ya salam kenal juga ..
sukses selalu utk gawe lu yeah ..