使用休眠回调的优势?
我无法理解使用Hibernate回调方法的优点,我们是否应该使用它的任何优点或特定用例。
public List findRecentRequests(final int offset, final int length)
{
List list = getHibernateTemplate().executeFind(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException
{
Query q = session.createQuery(FIND_RECENT_REQUESTS);
q.setFirstResult(offset);
q.setMaxResults(length);
return q.list();
}
});
return list;
}
另外一个更重要的问题是,在查询返回值后,HibernateCallback方法是否每次都关闭会话?我有一个用例,每次刷新状态页面时多次调用此函数,因此每次打开会话和查询数据库时都会调用此函数,或者它将查询结果存储在内存中,然后每次我调用此函数时,结果都会从内存中弹出。
我已阅读(参考资料):
默认情况下,spring HibernateTemplate.execute() 会在完成后关闭所有打开的会话。当与惰性初始化一起使用时,您可能会得到一个懒惰初始化异常,如下所示
org.hibernate.LazyInitializationException: 無法初始化 proxy - no Session
如能提及相关文件部分,将不胜感激。
更新:
在我的情况下,我使用ejb事务并将其设置为“支持”,我相信在这种情况下,因为事务设置为支持,它是可选的,因此每次创建新会话和休眠都会查询数据库以获取结果,因此这是我遇到的瓶颈,这是正确的假设吗?