hibernate一对多双向映射

实体类:班级和学生

映射文件

班级实体类

package com.java1234.model;

import java.util.HashSet;
import java.util.Set;
public class Class {
private long id;
private String name;
private Set<Student> students=new HashSet<Student>();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}

}

学生实体类

package com.java1234.model;

public class Student {
private long id;
private String name;
private Class c;

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}


public Class getC() {
return c;
}
public void setC(Class c) {
this.c = c;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}

}

班级映射文件:Class.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="com.java1234.model">


<class name="Class" table="t_class">
<id name="id" column="classId">
<generator class="native"></generator>
</id>

<property name="name" column="className"></property>

<set name="students" >
<key column="classId" cascade="save-update"></key>
<one-to-many class="com.java1234.model.Student"/>
</set>


</class>

</hibernate-mapping>

学生映射文件:Student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="com.java1234.model">


<class name="Student" table="t_student">
<id name="id" column="stuId">
<generator class="native"></generator>
</id>

<property name="name" column="stuName"></property>

<many-to-one name="c" column="classId" class="com.java1234.model.Class" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>

测试文件:

package com.java1234.service;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.java1234.model.Class;
import com.java1234.model.Student;
import com.java1234.util.HibernateUtil;

public class StudentTest {
private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
private Session session;
@Before
public void setUp() throws Exception {
session=sessionFactory.openSession(); // 生成一个session
    session.beginTransaction(); // 开启事务
}

@After
public void tearDown() throws Exception {
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
}

@Test
public void testSaveClassAndStudent() {
Class c=new Class();
    c.setName("08计本");
    Student s1=new Student();
    s1.setName("张三");
    Student s2=new Student();
    s2.setName("李四");
    c.getStudents().add(s1);
    c.getStudents().add(s2);
    session.save(c);
}

@Test
public void getStudentsByClass(){
Class c=(Class)session.get(Class.class, Long.valueOf(2));
Set<Student> students=c.getStudents();
Iterator it=students.iterator();
while(it.hasNext()){
Student s=(Student)it.next();
System.out.println(s);
}
}

}

testSaveClassAndStudent()方法是级联往数据库中的班级表和学生表中插入信息

班级表包括classId,name,学生表中包括id,name,classId

getStudentsByClass()方法是输出班级号为2的班级所有的学生

猜你喜欢

转载自blog.csdn.net/qq_40135955/article/details/80570647