Hibernate-----多对一关联映射(映射文件方式)

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);
       }
    }


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。