hibernate一对多单向关联

 

Hibernate 一对多关联:单向(从一的一端到多的一端)

对象模型:

Person: Integer personId, String name,Set addresses

Address:Integer addressId,

关系模型:

address表

person表

 

Person.hbm.xml

<class name="bean.Person" table="person" catalog="addressbooksample">

        <id name="personId" type="java.lang.Integer">

            <column name="personId" />

            <generator class="native" />

        </id>

        <property name="name" type="java.lang.String">

            <column name="name" length="20" />

        </property>

        <set name="addresses" cascade="save-update" lazy="false">

        <key column="personID"/>  和address表中的personID外键对应

        <one-to-many class="Address"/> 指定集合中放的什么类

        </set>

</class>

其实,set就是用于建立Person和Address关联的,只不过平常的关联都是某个类引用另外一个类的引用。Cascade 设置保存或更新person的时候,同时更新关联对象address。Lazy=”false”设置当查询person对象时,是否查询address

 

 

Address.hbm.xml

<class name="bean.Address" table="address" catalog="addressbooksample">

        <id name="addressId" type="java.lang.Integer">

            <column name="addressId" />

            <generator class="native" />

        </id>

        <property name="name" type="java.lang.String">

            <column name="name" length="20" />

        </property>

      

    </class>

 

测试:

---------------------------------------存储---------------------------------------

Person person = new Person();

       person.setName("王德雷");

 

       Address address1 = new Address();

       address1.setName("上海杨浦");

      

 

       Address address2 = new Address();

       address2.setName("河南洛阳");

      

       /**

         *只是从一的一端建立与多的一端的关联关系

         */

       Set<Address> addresses = person.getAddresses();

       addresses.add(address1);

       addresses.add(address2);

    personDao.save(person); //存储person对象,因为set中设置了cascade="save-update",会同时保存于person关联的address对象。

----------------------------------查询---------------------------------------------------

Person person=personDao.getPerson(10);

        System.out.println(person.getName());

    System.out.println(((Address)person.getAddresses().iterator().next()).getName()); //因设置了lazy="false",可以抓取到与person关联的address对象

因没建立从多的一端到一的一端的关联,因此address.getPerson()将报空异常

Address address=addressDao.getAddress(9);

System.out.println(address.getPerson().getName());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值