Hibernate作业-实验五关联映射

作业做的有点迷 不太明白  这次的。

https://blog.csdn.net/yerenyuan_pku/article/details/70152173点击打开链接

https://blog.csdn.net/xjy_1666/article/details/79160414点击打开链接

二、实验内容:

1. 单向的多对一关联映射;

2. 双向的一对一关联映射(基于主键或外键);

3. 单向的一对多关联映射;



四、实验过程及结果:

  1. 单向的多对一关联映射;(多个卡被一个人所有)

结果如图一



代码:

<hibernate-mapping package="com.Entity.User">

       <class name="Card" table="card">

              <id name="id"column="id">

                     <generator class="identity"/></id>     

              <property name="name"column="name"/>

                <many-to-one name="user"class="com.Entity.User.User" column="userId" >

        </many-to-one>

       </class>

</hibernate-mapping>

package com.Entity.User;

importorg.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

importorg.hibernate.cfg.Configuration;

import org.junit.Test;

publicclass CardTest {

       Configuration cfg = null;

       SessionFactory sf = null;

       Session s = null;

       Transaction ts = null;

       @Test

       publicvoid add(){

              try {

                     cfg = new Configuration().configure();

                     sf = cfg.buildSessionFactory();

                     s = sf.openSession();

                     ts = s.beginTransaction();

                     User user1=new User();

                     user1.setUserId(2);

//                   User user2=new User();

//                   user2.setUserId(2);              

                     Card card1=new Card();

                     card1.setName("spring");

                     Card card3=new Card();

                     card3.setName("springboot");

                     card1.setUser(user1);

                     card3.setUser(user1);    

                     s.save(card1);

                     s.save(card3);

                     ts.commit();

              } catch (HibernateException e) {

                     if(ts != null)

                     {

                            ts.rollback();

                     }

                     e.printStackTrace();

              }finally{

                     if(s != null){

                            s.close();

                     }

              }           

       }

}

2双向的一对一关联映射(基于主键或外键);

 

<hibernate-mapping package="com.Entity.User">

       <class name="User" table="user">

              <id name="userId"column="userId">

                     <generator class="identity">

                        <!-- property只关联对象 -->   

                <param name="property">card</param>

                </generator>

                     </id>

              <property name="userName"column="userName"/>

              <property name="password"column="password"/>

              <property name="gender"column="gender"/>

               <!-- 一个用户关联多个卡 -->

        <!--

            使用set来描述在一的一方中关联的多,也即Set<cards>

            它的name属性就是Set集合的名称:cards

    key:它主要描述关联的多的一方产生的外键名称,注意要与多的一方定义的外键名称相同

    one-to-many:主要描述集合中的类型

        -->

        <!-- <set name="cards" cascade="save-update">

            <key column="userId"/>

            <one-to-many class="com.Entity.User.Card"/>

        </set>

        -->

       <!-- <one-to-one name="card" property-ref="user"/>-->

        <!--constrained="true"表示person引用了idCard的主键作为外键--> 

        <!-- one-to-one指示hibernate如何加载其关联对象,默认根据主键加载   

            也就是拿到关系字段值,根据对端的主键来加载关联对象   

         -->   

        <one-to-one name="card"constrained="true" cascade="all"  property-ref="id"/> 

       </class>

</hibernate-mapping>

<hibernate-mapping package="com.Entity.User">

       <class name="Card" table="card">

              <id name="id"column="id">

                     <generator class="identity">

                     <!-- property只关联对象 -->   

                <param name="property">user</param>

            </generator>

              </id>

              <property name="name"column="name"/>

                   <many-to-one name="user" class="com.Entity.User.User"column="userId"

                    cascade="all"unique="true"  >

                </many-to-one>

       </class>

</hibernate-mapping>

3单向的一对多关联映射;(一个人有多个卡)

实验结果如图

 

代码:

<hibernate-mapping package="com.Entity.User">

       <class name="User" table="user">

              <id name="userId"column="userId">

                     <generator class="identity"/></id>

              <property name="userName"column="userName"/>

              <property name="password"column="password"/>

              <property name="gender"column="gender"/>

               <!-- 一个用户关联多个卡 -->

        <!-- 使用set来描述在一的一方中关联的多,也即Set<cards>它的name属性就是Set集合的名称:cardskey:它主要描述关联的多的一方产生的外键名称,注意要与多的一方定义的外键名称相同one-to-many:主要描述集合中的类型-->

        <set name="cards" cascade="save-update">

            <key column="userId"/>

            <one-to-many class="com.Entity.User.Card"/>

        </set>

       </class>

</hibernate-mapping>

@Test

       publicvoid OneToMore(){

              try {

                     cfg = new Configuration().configure();

                     sf = cfg.buildSessionFactory();

                     s = sf.openSession();

                     ts = s.beginTransaction();

                     User user1=new User();

                     user1.setUserName("mybatis");    

                     user1.setPassword("hiber");

                     Card card1=new Card();

                     card1.setName("springmvc");

                     Card card3=new Card();

                     card3.setName("springboot");

                     user1.getCards().add(card1);

                     user1.getCards().add(card3);

                     s.save(user1);

                     ts.commit();

              } catch (HibernateException e) {

                     if(ts != null)

                     {

                            ts.rollback();

                     }

                     e.printStackTrace();

              }finally{

                     if(s != null){

                            s.close();

                     }

              }           

       }



猜你喜欢

转载自blog.csdn.net/lettyisme/article/details/80587995