Hibernate Tutorial

Hibernate One to Many Annotation based Example

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