`
cloudtech
  • 浏览: 4610292 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Hibenate/JPA 多对多关系

 
阅读更多

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();

}

}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics