hibernate 怎么控制 级联查询?跪求指点~~~~


hibernate的级联查询,可不可以用代码来控制?我现在在配置文件中,有主外键关系的表都设置了联级查询,但在使用中,并不需要联级查出所有的表数据,所以想在台后处理中,手动控制一下联级表,不知道有没有可能,请高手指点~~~~~

21 个解决方案

#1


一般我用最小配置,配置更新删除级联,不配置查询级联,需要的时候使用HQL连接查询。

#2


嗯,你的意思我明白,但有时候 级联查询还是有好处的,比如:在页面显示多个表数据的时候

#3


引用 1 楼 apollo_ts 的回复:
一般我用最小配置,配置更新删除级联,不配置查询级联,需要的时候使用HQL连接查询。

受教了

#4


我是在用DWR 时候,发现有级联的List 返回的慢,才有了这个问题~~~,不知道朋友们在项目里都是怎么用的?请教了~~~~

#5


那可试验一下懒加载【lazy配置】。

#6


3Q 我研究一下,hibernate 用的还不熟,谢谢了~~~呵

#7


需要的时候使用HQL级联查询,不需要就不用,这样灵活方便

#8


引用 7 楼 lewis219 的回复:
需要的时候使用HQL级联查询,不需要就不用,这样灵活方便


我说的就是这个问题啊,可不可以在代码中控制呢???

#9


引用 8 楼 ibookvip 的回复:
引用 7 楼 lewis219 的回复:
需要的时候使用HQL级联查询,不需要就不用,这样灵活方便


我说的就是这个问题啊,可不可以在代码中控制呢???


可以 先把LAZY设置成TRUE 然后通过一个参数判断是否取消延迟加载

不过不推荐级联查询 这是个败笔..

#10


引用 9 楼 bearkin 的回复:
引用 8 楼 ibookvip 的回复:
 引用 7 楼 lewis219 的回复:
 需要的时候使用HQL级联查询,不需要就不用,这样灵活方便


 我说的就是这个问题啊,可不可以在代码中控制呢???


 可以 先把LAZY设置成TRUE 然后通过一个参数判断是否取消延迟加载

 不过不推荐级联查询 这是个败笔..




朋友这个方法在代码里怎么实现的? 怎么写这个取消延迟的代码?? 还有 级联查询真的很失败吗??

#11


没有特殊操作 不过很麻烦 根据参数使用某个属性来取消延迟 让他在查询之后迅速加载(假像...)

级联查询别人认为怎样我不管 但是有时候需要 有时候不需要 那就不如不用 需要的时候再手动查 一对一或者多对一可以用 但是一对多 那就绝对不要用

#12


举个很简单的例子,比如你的customer类对应很多orderform类
class customer{
  private Set orderforms;
}
如果要在加载user的时候加载orderforms对象,可以如下处理:
session.get(User.class,userId);
Hibernate.initialize(user.getOrderforms());
这样就实现了级联加载

#13


试试这个:
session.createCriteria(TestUser.class).setFetchMode("arg0", FetchMode.LAZY);

#14


引用 12 楼 tangyanbo1110 的回复:
举个很简单的例子,比如你的customer类对应很多orderform类
 class customer{
   private Set orderforms;
 }
 如果要在加载user的时候加载orderforms对象,可以如下处理:
 session.get(User.class,userId);
 Hibernate.initialize(user.getOrderforms());
 这样就实现了级联加载



我问的问题,不是怎么级联的问题,是级联怎么控制的问题,在一个表与多表级联的时候,打开所有级联会有把所有表都查一遍,我想是不是可以有代码来控制级联查询,需要的时候我代码控制打开,不需要的时候就不级联查~~

#15


引用 13 楼 islandrabbit 的回复:
试试这个:
 session.createCriteria(TestUser.class).setFetchMode("arg0", FetchMode.LAZY);


OK,3Q,我试一试,我是用HQL查询~~~

#16


学习。。

#17


嗯,比较赞同1楼的方法。级联查询看上去很美,实际上使用的时候很容易产生大问题。我曾经接手过一个程序,数据库什么的设计得都不错,功能也全,不过在运行时每次都几乎查询所有的表,有时甚至还要载入,客户疯了,我半疯,最后花了很长时间来修改后台,但是没有重写,最终还是没弄利索,治标不治本。从此以后但凡数据库我都设置为手动查询,除非特别有把握的,基本不关联表格。

#18




最近看了一下hibernate 级联的资料,没有想像的那么糟糕,hibernate完全可以通过代码来控制级联的条件,深度,结论是:HIBERNATE 确实是非常方便的(个人见解~~),呵呵,结贴了,谢谢朋友们的参与~~

#19


额,最后也不说明下楼主最后的解决方案是什么? 设置Lazy=true?还是.setFetchMode("arg0", FetchMode.LAZY);

#20


我找到最后的解决方案了,在相应的映射文件里设置lazy=‘true’ fetch=‘select’
设置lazy的目的在于懒加载,当访问到级联表的数据时才加载
而select在于使用额外sql语句来查询

#21


就是,最后的解决方案也不说,,,,,
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告