标签: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