package com.bjsxt.hibernate; import org.hibernate.Session; import junit.framework.TestCase; public class Many2OneTest extends TestCase { public void testSaveMany2one1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Group group = new Group(); group.setName("java开发组"); for (int i = 0; i < 10 ; i++) { User user = new User(); user.setName("User_" + i); //建立对象之间的关系 user.setGroup(group); //因为user引用了Transient对象(group),所以抛出了TransientObjectException //持久对象不能直接引用瞬时对象 session.save(user); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testSaveMany2one2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Group group = new Group(); group.setName("java开发组"); //将group转换为持久对对象 session.save(group); for (int i = 0; i < 10 ; i++) { User user = new User(); user.setName("User_" + i); //建立对象之间的关系 user.setGroup(group); //因为group为持久对象,所以可以成功保存 session.save(user); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testSaveMany2one3() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Group group = new Group(); group.setName("java开发组"); for (int i = 0; i < 10 ; i++) { User user = new User(); user.setName("User_" + i); //建立对象之间的关系 user.setGroup(group); //通过级联,是解决TransientObjectException异常的一种手段 session.save(user); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 转载User对象 * */ public void testLoadUser() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); User user = (User)session.load(User.class, 20); System.out.println("user name=" + user.getName()); System.out.println("related group=" + user.getGroup().getName()); }catch(Exception e) { e.printStackTrace(); }finally { } } } User.hbm.xml: <?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> <class name="com.bjsxt.hibernate.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- <many-to-one name="group" column="relatedGroup" /> --> <many-to-one name="group" column="relatedGroup" cascade="all"/> </class> </hibernate-mapping> Group.hm.xml: <?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> <class name="com.bjsxt.hibernate.Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping> 笔记: 1:使用junit。继承TestCase类,并且测试的方法必须易test开头(testXXX),没有返回值和参数。