One-to-many Association Mapping Annotation
One-to-many associations are declared at the property level with the annotation @OneToMany. One to many associations may be bidirectional.
A unidirectional one to many with join table is much preferred. This association is described through an@JoinTable.
@OneToMany(cascade = CascadeType.ALL) @JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") })
Student.java
package com.candidjava.hibernate; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name = "STUDENT") public class Student { private long studentId; private String studentName; private Set<Phone> studentPhoneNumbers = new HashSet<Phone>(0); public Student() { } public Student(String studentName, Set<Phone> studentPhoneNumbers) { this.studentName = studentName; this.studentPhoneNumbers = studentPhoneNumbers; } @Id @GeneratedValue @Column(name = "STUDENT_ID") public long getStudentId() { return this.studentId; } public void setStudentId(long studentId) { this.studentId = studentId; } @Column(name = "STUDENT_NAME", nullable = false, length = 100) public String getStudentName() { return this.studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } @OneToMany(cascade = CascadeType.ALL) @JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") }) public Set<Phone> getStudentPhoneNumbers() { return this.studentPhoneNumbers; } public void setStudentPhoneNumbers(Set<Phone> studentPhoneNumbers) { this.studentPhoneNumbers = studentPhoneNumbers; } }
Phone.java
package com.candidjava.hibernate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "PHONE") public class Phone { private long phoneId; private String phoneType; private String phoneNumber; public Phone() { } public Phone(String phoneType, String phoneNumber) { this.phoneType = phoneType; this.phoneNumber = phoneNumber; } @Id @GeneratedValue @Column(name = "PHONE_ID") public long getPhoneId() { return this.phoneId; } public void setPhoneId(long phoneId) { this.phoneId = phoneId; } @Column(name = "PHONE_TYPE", nullable = false, length = 10) public String getPhoneType() { return this.phoneType; } public void setPhoneType(String phoneType) { this.phoneType = phoneType; } @Column(name = "PHONE_NUMBER", nullable = false, length = 15) public String getPhoneNumber() { return this.phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } }
save or inserting record into many to One annotation mapping
public void insertStudent(Student si) { try { Session s = getSession(); Transaction transaction = s.beginTransaction(); s.save(si); transaction.commit(); } catch (HibernateException e) { e.printStackTrace(); } }
Get or fetch record from many to One annotation mapping
public List<Student> getStudent(long id) { List ls=null; try { Session s = getSession(); ls=s.createCriteria(Student.class).add(Restrictions.eq("studentId",id)).list(); // System.out.println(ls.size()); } catch (HibernateException e) { System.out.println(e.getMessage()); } return ls; }
Download
Hibernate One to many annotation war
Hibernate One to Many annotation zip