当前位置: 首页 > 面试题库 >

使用Hibernate Callback的优势?

蓟雪峰
2023-03-14
问题内容

我无法理解使用Hibernate Callback方法的优势,是否有任何优势或应在其中使用的特定用例。

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方法是否每次都会关闭会话吗?我有用例,每次刷新状态页时都会多次调用此函数,因此每次打开会话和查询数据库时都会调用此函数,或者将查询结果存储在内存中,然后每次调用此函数时,都会弹出结果从记忆里。

我已阅读(参考):

春天的HibernateTemplate.execute()默认在完成时关闭所有打开的会话。与延迟初始化一起使用时,您可能会收到类似以下内容的LazyInitializationException

org.hibernate.LazyInitializationException:无法初始化代理-没有会话

任何对相关文档部分的引用将不胜感激。

更新:

在我的情况下,我使用ejb事务并将其设置为“
support”,并且我认为在这种情况下,由于事务设置为support,因此它是可选的,因此每次创建新会话时,hibernate将查询数据库以获取结果,所以这就是有瓶颈,是否可以做出正确的假设?


问题答案:

就您为什么使用HibernateCallback。简短答案-
它允许您访问当前的事务绑定会话,以执行更复杂的hibernate功能。在大多数情况下,使用简单的方法就HibernateTemplate足够了,但是有时您需要使用Session

这个难题有两个部分。

第一个是通过使用PlatformTransactionManager/ TransactionTemplateOR
@Transactional注释定义的事务范围。有关更多信息,请参见spring docs / google。

第二个是,当您处于事务中时,HibernateTemplate将使用一些魔术与当前事务进行交互。

因此,像这样的简单操作hibernateTemplate.save()将参与交易。像您的示例这样更复杂的事务也将参与事务。实际上,hTemplate上的几乎任何方法都会参与。

因此,请问您有关会话何时关闭的问题

  • 如果您显式使用事务,请参见上面的第一点,然后在事务作用域关闭时,将提交事务,并关闭会话。
  • 如果没有事务,spring每次您调用一个HibernateTemplate方法都会为您创建一个会话,然后立即关闭它。这不是首选方法,因为除非您执行非常简单的操作,否则结果将与会话分离,并且您将获得LazyInit异常。

在上面第二种情况下要注意的重要一点是,没有显式事务。您受连接的自动提交模式的支配,因此您可能会在回调中执行保存,保存,引发异常的操作。第一次保存可能已提交,没有交易就无法保证。

我的建议是在进行任何更新时都使用事务。

如果您对交易的所有内容都不熟悉,请查看spring文档以获取交易章节。



 类似资料:
  • 问题内容: 使用内容类型application / json通过文本/纯文本发送序列化为json的对象有什么性能优势?我知道许多框架(例如Spring)都可以根据内容类型映射和序列化数据,但是总的来说,我发现此过程非常简单,因此对于在JSON对象上使用application / json而不是text / plain的应用,这并不是一个令人信服的理由。 。 问题答案: 假设您正在谈论使用JSON与

  • 我是移动自动化的新手,我计划自动化一个原生的Android应用程序(不是我自己的,所以我只有APK文件),所以我正在阅读有关可用于Android自动化的工具。我遇到了Appium,我知道它使用蒸发器来做到这一点。我想知道使用Appium而不是直接使用Uiautomator有什么好处,或者在这种情况下,使用应用程序或Uiautomator更好。

  • 问题内容: 我只是想知道什么是使用的优点和缺点,我们通常使用或但它会有所作为,如果我们使用?使用或任何其他打印语句是否有特定的缺点或优点? 谢谢。 编辑:是的,我确实知道printf和println之间的区别。 问题答案: Printf允许特殊格式: http://java.sun.com/developer/technicalArticles/Programming/sprintf/ 那是优势。

  • 问题内容: 我无法理解使用Hibernate Callback方法的优势,是否有任何优势或应使用的特定用例。 还有一个更重要的问题是HibernateCallback方法是否在查询返回值后每次都关闭会话?我有用例,每次刷新状态页时都会多次调用此函数,因此每次打开会话和查询数据库时都会调用此函数,或者将查询结果存储在内存中,然后每次调用此函数时,都会弹出结果从记忆里。 我已阅读(参考): 春天的Hi

  • 本文向大家介绍使用vuex的优势是什么?相关面试题,主要包含被问及使用vuex的优势是什么?时的应答技巧和注意事项,需要的朋友参考一下 其实vuex中的所有功能都能够通过其他的方式进行实现,只不过vuex对这些方法进行了整合处理,使用起来更加便捷,同时也便于维护。全局状态变量的统一管理,有这么个中介你找不找他呢?

  • 我在PHP中使用了一些AJAX来处理提交表单之类的事情,最近我开始研究WebSockets。我跟随本教程来了解基础知识。据我所知,websockets保持连接打开,而AJAX打开和关闭请求。 我的问题是,如果您只是提交表单或auto_complete之类的简单任务(这里有一个jQuery插件),websockets是否比AJAX有优势?也许教程不是最棒的,但似乎要让websockets工作(至少在