hibernate 关联保存 的困惑

两个POJO,Riji(日记) 和Rijipinglun (日记评论)
[code="java"]
Riji riji=findRiji(id);
Rijipinglun rijipinglun=new Rijipinglun();
[color=red]riji.getRijipingluns().add(rijipinglun);
rijipinglun.setRiji(riji);[/color]
save(rijipinglun);
[/code]
问题就在两句红的那,如果我只写第二句,那么hibernate会发出两个语句,一个查询日记,一个保存评论,
可是加了红色 第一句,那么hibernate会多发出一个查找相关评论的语句
hibernate视乎推荐第二个,为什么,这样好像效率更低

[b]问题补充:[/b]
[code="java"]Riji riji=findRiji(id);

Rijipinglun rijipinglun=new Rijipinglun();

riji.getRijipingluns().add(rijipinglun);

rijipinglun.setRiji(riji);

save(rijipinglun); [/code]
可能问题还没问清楚。
我觉得下面这句可有可无,因为通常多端是控制端,并且一般都是,而且设置了级联
保存更新,而下面的句子平白的多了一次查询,及查询日记的所有评论记录。
[color=red]riji.getRijipingluns().add(rijipinglun);[/color]
[b]问题补充:[/b]
蔡华江 lovewhzlq 都讲到了关联双向。我现在考虑了一下:
事实上
riji.getRijipingluns().add(rijipinglun);
不会对持久化有影响。
当然有时候估计操作方便,可能还会用到,比如同时要持久化多个
riJiPinglun,那么没有前面那句话,就得一个一个去save.
对于hibernate 一级缓存而言(个人认为一级缓存作用不大),持久化了riJiPinglun之后紧接着就会关闭session,而在另一个session中取得日记所属日记评论。

另外大部分时候调用riji.getRijipingluns()都会导致加载所有的数据,通常我们会使用过滤或者hql限制取得条件。

查看全部
allwefantasy
祝威廉
2009/10/14 17:55
  • hibernate
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

0个回复