1、数据库结构:
2、实体代码:
teacher类:
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "t_teacher")
public class Teacher {
@Id
Integer teacherId;
String teacherName;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
//CascadeType参考 这里不建议将CascadeType类型设置为ALL
@JoinTable(name = "t_teacher_student", joinColumns = { @JoinColumn(name = "teacherid") }, inverseJoinColumns = { @JoinColumn(name = "studentid") })
//@JoinTable参考:
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);
}
}
Student类:
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "t_student")
public class Student {
@Id
Integer studentId;
String studentName;
@ManyToMany(mappedBy = "students", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
Set<Teacher> teachers = new HashSet<Teacher>(0);
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 Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
public void addTeachers(Teacher teacher) {
this.teachers.add(teacher);
}
}
测试代码:
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.setStudentId(new Integer(1));
s1.setStudentName("studentname1");
s2 = new Student();
s2.setStudentId(new Integer(2));
s2.setStudentName("studentname2");
Teacher t1, t2;
t1 = new Teacher();
t1.setTeacherId(new Integer(1));
t1.setTeacherName("teacherName1");
t2 = new Teacher();
t2.setTeacherId(new Integer(2));
t2.setTeacherName("teacherName2");
t1.addStudent(s1);
t1.addStudent(s2);
t2.addStudent(s1);
t2.addStudent(s2);
session.save(s1);
session.save(s2);
session.save(t1);
session.save(t2);
session.getTransaction().commit();
session.close();
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">MY</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:oracle</property>
<property name="hibernate.connection.username">MY</property>
<property name="hibernate.default_schema">MY</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.show_sql">true</property>
<mapping class="ss.Student" />
<mapping class="ss.Teacher" />
</session-factory>
</hibernate-configuration>
HibernateUtil 辅助类:
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("初始化SessionFactory失败!" + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session getCurrentSession() throws HibernateException {
Session s = (Session) session.get();
// 当原Session为空或已关闭时,打开一个新的Session
if (s == null || !s.isOpen()) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null) {
s.close();
}
}
}