1. 学生表student 和年级表 grade

2. 类Student 和Grade类
1 2 3 4 5 6 7
| public class Student { private int id; private String name; private int age; private Grade grade; }
|
1 2 3 4 5 6
| public class Grade { private int id; private String name; private Set<Student> students = new HashSet<Student>(0); }
|
3. 映射文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <hibernate-mapping package="cn.siggy.pojo"> <class name="Grade"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <set name="students"> <key column="grade_id"></key> <one-to-many class="Student"/> </set> </class> </hibernate-mapping>
|
1 2 3 4 5 6 7 8 9 10
| <hibernate-mapping package="cn.siggy.pojo"> <class name="Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/> <many-to-one name="grade" class="Grade" column="grade_id" not-null="true"></many-to-one> </class> </hibernate-mapping>
|
4. 测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| @Test public void testSave() throws HibernateException, SerialException, SQLException{ Session session = null; Transaction tx = null; try{ session = HibernateUtil.getSession(); tx = session.beginTransaction(); Grade grade = new Grade(); grade.setName("基础");
Student stu = new Student(); stu.setName("张三疯"); stu.setAge(22); stu.setGrade(grade); Student stu1 = new Student(); stu1.setName("老王"); stu1.setAge(23); stu1.setGrade(grade); session.save(grade); session.save(stu); session.save(stu1);
tx.commit();
}catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } } @Test public void testGet(){ Session session = null; Transaction tx = null; try{ session = HibernateUtil.getSession(); tx = session.beginTransaction(); Grade grade = (Grade)session.get(Grade.class, 2); System.out.println("gradeName="+grade.getName()); System.out.println("grade所对应的多的一端的数据"); Iterator<Student> iter = grade.getStudents().iterator(); for(;iter.hasNext();){ Student temp = iter.next(); System.out.println("name="+temp.getName()+"\tage="+temp.getAge()); } System.out.println("========================"); Student stu = (Student)session.get(Student.class, 1); System.out.println("studentname="+stu.getName()+"gradeName="+ stu.getGrade().getName()); tx.commit(); }catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } }
|
总结:
在双向的一对多关联映射中,注意一的一端的配置:<key>中不用指定非空not-null;如果想要一的一端来维护关系,那么在多的一端不用指定关联列非空。
本文标题:Hibernate双向一对多的关联映射
文章作者:foreverSFJ
发布时间:2019-06-10 17:55:39
最后更新:2019-06-10 17:55:39
原始链接:Notes/Java/Persistence/Hibernate/双向一对多的关联映射.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!