两个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限制取得条件。