Hibernate 一对多关系映射

本文介绍了一种使用Java Hibernate框架实现的学生与教师之间多对一关系的对象关系映射(ORM)。通过具体的学生(Student)类和教师(Teacher)类的代码示例,展示了如何在实体类中定义这种关系,并在Hibernate会话中保存这些实体。

Student类:

import java.util.HashSet;

import java.util.Set;

import javax.annotation.Generated;

import javax.persistence.CascadeType;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.ManyToOne;

import javax.persistence.SequenceGenerator;

import javax.persistence.Table;

@Entity

@Table(name = "t_student")

@SequenceGenerator(name = "seq", sequenceName = "seq_teacher_id")

public class Student {

@Id

@GeneratedValue(generator = "seq")

Integer studentId;

String studentName;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)

@JoinTable(name = "t_teacher_student", inverseJoinColumns = { @JoinColumn(name = "teacherid") }, joinColumns = { @JoinColumn(name = "studentid") })

Teacher teacher = new Teacher();

public Integer getStudentId() {

return studentId;

}

public void setStudentId(Integer studentId) {

this.studentId = studentId;

}

public String getStudentName() {

return studentName;

}

public void setStudentName(String studentName) {

this.studentName = studentName;

}

public Teacher getTeacher() {

return teacher;

}

public void setTeacher(Teacher teacher) {

this.teacher = teacher;

}

}

Teacher:

import java.util.HashSet;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.OneToMany;

import javax.persistence.SequenceGenerator;

import javax.persistence.Table;

@Entity

@Table(name = "t_teacher")

@SequenceGenerator(name = "seq", sequenceName = "seq_student_id")

public class Teacher {

@Id

@GeneratedValue(generator = "seq")

Integer teacherId;

String teacherName;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "teacher")

Set<Student> students = new HashSet<Student>(0);

public Integer getTeacherId() {

return teacherId;

}

public void setTeacherId(Integer teacherId) {

this.teacherId = teacherId;

}

public String getTeacherName() {

return teacherName;

}

public void setTeacherName(String teacherName) {

this.teacherName = teacherName;

}

public Set<Student> getStudents() {

return students;

}

public void setStudents(Set<Student> students) {

this.students = students;

}

public void addStudent(Student student) {

this.students.add(student);

}

}

测试:

import org.hibernate.Session;

import org.hibernate.Transaction;

import commons.utils.HibernateUtil;

public class Test {

public static void main(String[] args) {

Session session = HibernateUtil.getCurrentSession();

session.getTransaction().begin();

Student s1, s2;

s1 = new Student();

s1.setStudentName("studentname1");

s2 = new Student();

s2.setStudentName("studentname2");

Teacher t1, t2;

t1 = new Teacher();

t1.setTeacherName("teacherName1");

t2 = new Teacher();

t2.setTeacherName("teacherName2");

s1.setTeacher(t1);

s2.setTeacher(t1);

session.save(s1);

session.save(s2);

session.save(t1);

session.save(t2);

session.getTransaction().commit();

session.flush();

session.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值