站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题Hibernate查询问题,进来拿分!

Hibernate查询问题,进来拿分!

摘要: Hibernate查询问题,进来拿分!


当我设置了Lazy屬性為false時,通過Session.find(HQL)查詢出來的List中的對象能導航到其他對象。

而Lazy为true时,应如何查询到相应对象及其关联的其他对象?





因为在业务中,一个对象可能和其它多个对象关联
而我只需要查询出关联的其中部分对象,而不是全部对象,该怎么做呢


我在Spring中使用hibernate.


不懂


我也听的得不是蛮懂额


我用nHibernate,也不是很懂


你可以把所有的关联对象的lazy设置为false,然后通过Hibernate.initialize()方法强制加载某集合,使他们在session关闭后仍然可以使用
比如User关联一个集合Set addresses,设置关联lazy为false,为了使addresses在session关闭后仍然可以使用,我们在查询的时候使用:
Hibernate.initialize(user.getAddresses()); //强制实例化
以后在session关闭后,调用user.getAddresses()得到关联集合,将不会抛出异常
不知道我解释的是否足够清楚,如果LZ还不清楚,建议看看hibernate的文档


路过,友情up...


killme2008(为了生态平衡,请保护蛤蟆)

你说的那个方法我是知道的
我查询一个Addresses的时候 ,不需要查询User,而有的时候又需要,我设置了Lazy为false;

我用Session.find("from addresses as c")查询出来的时候,是一个List;

你说的那个Hibernate.initialize()是加载单个对象的.

而我查询出来的都是List,该怎么样才能在Session关闭后才能使用关联对象?




迭代使用Hibernate.initialize()


我看到有的代码是这样写的
无非就是循环List内每一个对象,然后再去读取一下关联对象,
这样虽然说是可行的,但是那个循环是无意义的
有没有别的方法可行的?

List list=Session.find("from addresses as c");
for(int i = 0; i < list.size(); i++)
{
Addresses ad=(Addresses)list.get(i);
ad.getUser().getName();
}



我的意思是:
List list=Session.find("from addresses as c");
Iterator it=list.iterator();
while(it.hasNext){
address=(Address)it.next();
Hibernate.initialize(address.getUsers());
}
如此迭代,强制实例化关联的集合,Hibernate.initialize()不只加载单个对象,也可以强制加载集合类型的
实在不行就使用OpenSessionInView模式吧,把session传到view再关闭,如果有用到spring,配合使用非常好


killme2008(为了生态平衡,请保护蛤蟆)

我的就是在Spring下使用的.我在Struts那端访问关联对象的时候.
总是报告"The own session is closed"

也就是说,都要去循环List里面的每个类,分别去初始化?
没直接的方法让lazy为false的,在代码里变为立即检索.







你了解下OpenSessionInView模式吧,这方面的资料很多,或者查看spring自带的文档


OpenSessionInView就是 在view层还能OpenSession?

我看了一下
这里有有牛人robbin关于这方面的文章.

http://forum.javaeye.com/viewtopic.php?t=15057


OpenSessionInView的原理是什么呢?


顾名思义,原理就是打开一个session一直保留到你页面显示完你数据之后再关闭session,本质上也就是通过一个filter拦截器来实现



这样对性能会不会有影响?
按道理说数据连接执行完后应该马上关闭

应该是不推荐使用这个吧?
如果页面数据很大,或者做循环去了,那就一直占用着连接~!

谢谢killme2008(为了生态平衡,请保护蛤蟆) 的帮助和回复.


这个跟网络连接有关的,具体性能讨论请你去javaeye论坛看看
我个人认为并没有太大影响


http://forum.javaeye.com/viewtopic.php?t=17501
这是一篇很精彩的帖子,你看看


↑返回目录
前一篇: 有关分割HTML代码问题!!!急~~~
后一篇: 如何防止用户非法访问网站目录