hibernate的级联查询,可不可以用代码来控制?我现在在配置文件中,有主外键关系的表都设置了联级查询,但在使用中,并不需要联级查出所有的表数据,所以想在台后处理中,手动控制一下联级表,不知道有没有可能,请高手指点~~~~~
21 个解决方案
一般我用最小配置,配置更新删除级联,不配置查询级联,需要的时候使用HQL连接查询。
嗯,你的意思我明白,但有时候 级联查询还是有好处的,比如:在页面显示多个表数据的时候
我是在用DWR 时候,发现有级联的List 返回的慢,才有了这个问题~~~,不知道朋友们在项目里都是怎么用的?请教了~~~~
3Q 我研究一下,hibernate 用的还不熟,谢谢了~~~呵
需要的时候使用HQL级联查询,不需要就不用,这样灵活方便
没有特殊操作 不过很麻烦 根据参数使用某个属性来取消延迟 让他在查询之后迅速加载(假像...)
级联查询别人认为怎样我不管 但是有时候需要 有时候不需要 那就不如不用 需要的时候再手动查 一对一或者多对一可以用 但是一对多 那就绝对不要用
举个很简单的例子,比如你的customer类对应很多orderform类
class customer{
private Set orderforms;
}
如果要在加载user的时候加载orderforms对象,可以如下处理:
session.get(User.class,userId);
Hibernate.initialize(user.getOrderforms());
这样就实现了级联加载
试试这个:
session.createCriteria(TestUser.class).setFetchMode("arg0", FetchMode.LAZY);
嗯,比较赞同1楼的方法。级联查询看上去很美,实际上使用的时候很容易产生大问题。我曾经接手过一个程序,数据库什么的设计得都不错,功能也全,不过在运行时每次都几乎查询所有的表,有时甚至还要载入,客户疯了,我半疯,最后花了很长时间来修改后台,但是没有重写,最终还是没弄利索,治标不治本。从此以后但凡数据库我都设置为手动查询,除非特别有把握的,基本不关联表格。
最近看了一下hibernate 级联的资料,没有想像的那么糟糕,hibernate完全可以通过代码来控制级联的条件,深度,结论是:HIBERNATE 确实是非常方便的(个人见解~~),呵呵,结贴了,谢谢朋友们的参与~~
额,最后也不说明下楼主最后的解决方案是什么? 设置Lazy=true?还是.setFetchMode("arg0", FetchMode.LAZY);
我找到最后的解决方案了,在相应的映射文件里设置lazy=‘true’ fetch=‘select’
设置lazy的目的在于懒加载,当访问到级联表的数据时才加载
而select在于使用额外sql语句来查询