`
ericslegend
  • 浏览: 85908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate——Lazy, Inverse, Select

    博客分类:
  • Java
阅读更多

Inverse:可选,意为“反转”,用于表示双向关联中的被动一端。在关联关系中,inverse=false”的一方为主控方,负责维护关联关系,它的默认值是“false”。

例:memberorder是一对多关系。

Member.hbm.xml的配置文件中

<set name=orders order-by=order_idcascade=alllazy=trueinverse=true>

    <key column=member_id/>

    <one-to-many class=Order/>

</set>

1.Inverse=true”表示Member不再作为关系的主控方,而由Order做主控方负责维护关系。这样在Order对象持久化时,它会主动去获取相关的Mememberid,作为自己的member_id.(在一对多关系中一般将多的一方设置为false,即关系的主控方,这将有助于改善性能)。

2.Cascade:如上对Membercascade设置为all,表明对member对象的任何操作都会对与member对象相关联的order进行同样的操作。

3.新增一个Order对象时

l        如果设one端(member)为主控方(inverse=false),则代码如下:

Order order=new Order();

member.getOrders().add(order);//会加载与此member相关联的所有Order集合,会占用大量内存,影响性能。

session.save(member);

l        如果设置many端(order)为主控方

Order order=new Order();

order.setMember(member);

session.save(order);

无需加载与member相关联的多有Order对象。

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics