标签:hibernate 多对一关联映射 映射文件 orm 框架
N-1关联映射原理:在多的一端加入一个外键,指向一的一端
Many(维护端:User)
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.app.model"> <class name="User"table="t_user"> <id name="id"> <generator class="increment"/> </id> <property name="name"/> <!-- 维护关系:在多的一端添加外键(group_id)指向一的一端--> <many-to-one name="group"column="group_id" cascade="save-update"/> <!-- 级联是对象之间的连锁操作,它只影响增、删、改 --> </class> </hibernate-mapping>To
One(非维护段:Group)
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.app.model"> <class name="Group" table="t_group"> <id name="id"> <generator class="increment"/> </id> <property name="name"/> </class> </hibernate-mapping>
public void testManyToOne() { Session session= null; try { session= HibernateUtils.getSession(); session.beginTransaction(); Group group = new Group(); group.setName("group1"); // 若不先保存group对象;在清理缓存时会抛出TransientObjectException异常;因为Persistent状态的对象不能引用Transient状态的对象 // 若user中使用了级联特性,可不用保存group;因为保存User的时候,Hibernate会保存User维护的关联对象Group session.save(group); User user = new User(); user.setName("user1"); user.setGroup(group); session.save(user); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { HibernateUtils.closeSession(session); } }
标签:hibernate 多对一关联映射 映射文件 orm 框架
原文地址:http://blog.csdn.net/hekewangzi/article/details/41519229