Relasi “One to Many” di Hibernate

December 4th, 2010 by 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.

One to Many (Student and Course)



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

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!

DeliciousDiggFacebookNetlogMultiplyTechnorati FavoritesTwitterTypePad PostYahoo BookmarksShare

Baca lain juga:

Posted in Programming

Paulus Ganesha Aryo Prakoso

Tentang Penulis:

Paulus Ganesha Aryo Prakoso sering dipanggil akrab Paul atau Gagah. Dia adalah seorang penyandang cacat tunarungu (tidak bisa mendengar) tetapi bisa bicara. Dia seorang Java Developer yang bekerja di sebuah perusahaan IT & Telecom, Ensemble Consulting, Citylofts. Telah berpengalaman dalam teknologi Java yaitu Spring Framework, JSF 2.0, Hibernate dan sebagainya. Selain itu, dia juga menulis blog ini. Lihat profile »

4 Responses

  1. Kiki Says:

    Thx banget bro untuk tutorialnya :D
    Skalian relasi ManyToMany donk ^^

  2. Paulus Ganesha Aryo Prakoso Says:

    Iya sama2 .. sip ..

  3. medisonsimbolon Says:

    Wah, bagus sekali.. Terimakasih ya. Salam kenal.. :D

  4. Paulus Ganesha Aryo Prakoso Says:

    Hai medison, ya makasih… ya salam kenal juga .. :) sukses selalu utk gawe lu yeah .. :)

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.