标签:
一对多关系
one的一方使用Set保存它所对应的many的一方的多个数据。使用set因为数据库记录也是没有重复的,Set当然也是没有重复的。
Hibernate有一个有趣的地方,可以查询得到类,然后做修改,最后session.beginTransaction().commit();就能自动把对类的更新固化到数据库。
当然查询就不必开始事务。
另外,级联删除只需要在one的一方的mapping文件加上cascade="all" 详见下面的配置文件
下面贴几个重要文件:
1、Teacher.java
package com.learn.po; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.hibernate.Session; import com.learn.dao.HibernateUtil; public class Teacher { private int teacherid; private String nm; private Set<Student> sss = new HashSet<Student>(); public String getNm() { return nm; } public Set<Student> getSss() { return sss; } public void setSss(Set<Student> sss) { this.sss = sss; } public void setNm(String nm) { this.nm = nm; } public int getTeacherid() { return teacherid; } public void setTeacherid(int teacherid) { this.teacherid = teacherid; } public static void getQuery1(){ Session session = HibernateUtil.getSessionFactory().openSession(); /*仅仅对Teacher查询还没有查Teacher对应的Student*/ Teacher t = (Teacher)session.get(Teacher.class, 3); System.out.println(t.getNm()); /*以下涉及了多的一方 所以加上一次对Sudent的查询并存到set*/ System.out.println(t.getSss().size()); Set<Student>ss = t.getSss(); for (Iterator iterator = ss.iterator(); iterator.hasNext();) { Student student = (Student) iterator.next(); System.out.println(student.getNm()); } session.close(); } public static void changeTeacher(){ Session session = HibernateUtil.getSessionFactory().openSession(); Teacher t1 = (Teacher) session.get(Teacher.class, 1); Teacher t2 = (Teacher) session.get(Teacher.class, 2); Student s = (Student) session.get(Student.class, 4); //System.out.println(s.getNm()); t2.getSss().remove(s); t1.getSss().add(s); session.beginTransaction().commit(); } public static void deleteCascade(){ /*先删除该老师的所有学生,再删除这个老师*/ //因为在配置文件里面cascade="all"所以可以级联删除 Session session = HibernateUtil.getSessionFactory().openSession(); Teacher t1 = (Teacher) session.get(Teacher.class, 1); session.delete(t1); session.beginTransaction().commit(); } public static void main(String args[]){ //getQuery1(); //changeTeacher(); //deleteCascade(); } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.learn.po"> <class name="Teacher" table="teacher" lazy="true"> <id name="teacherid"> <generator class="identity"></generator> </id> <property name="nm"></property> <set name="sss" cascade="all"> <!-- 这里的key表示作为外键的属性,如果该表的多个属性都是作为外键,那么下面多个key --> <key column="teacherid"></key> <!-- 这里的class是 多 的一方 --> <one-to-many class="Student" /> </set> </class> </hibernate-mapping>
版权声明:本文为博主原创文章,未经博主允许不得转载。
SSH学习五 Hibernate one to many assiciation
标签:
原文地址:http://blog.csdn.net/u011026968/article/details/47156979