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

Hibernate SQLQuery绕过休眠会话缓存

岳时铭
2023-03-14
问题内容

我正在“事务化”一些广泛的数据库操作,并且遇到了以下问题:如果我通过hibernate模式运行sql查询,但未使用MQL方法,则数据库视图似乎不正确。具体来说,在大多数情况下,代码以更适当的方式使用hibernate模式,但是在某些地方,有人决定只执行sql。我不喜欢他们这样做,但是在这一点上“这就是事实”。

我发现了一个解释,这似乎解释,但所有的示例都是WRT实际上得到和管理代码交易。我们在整个类上使用@TransactionAttribute批注来更改此代码,并发现了发生此行为的很多地方,但我不完全相信该解释适用于仅包装在批注中的代码-
我当时假设使用hibernate管理器的任何东西都将依赖于会话中的对象缓存。

如果我因错误的术语等而处于hibernate状态,请提前致歉。


问题答案:

您的问题令人困惑,但是我想您是说Hibernate在执行本机查询时不在会话缓存中寻找实体。

SQL查询或本机查询是Hibernate只是中继到数据库的查询。Hibernate不会解析查询,也不会解析结果。但是,Hibernate将允许您处理结果,以将列转换为类的属性。也就是说,本机查询绕过会话缓存听起来很自然。这是因为Hibernate对您的查询一无所知,也不知道该查询的“结果”(当时还不是对象)。



 类似资料:
  • 问题内容: 我在hibernate和延迟加载方面遇到问题。 背景:我有一个Spring MVC Web应用程序,我将Hibernate用于持久层。我正在使用OpenSessionInViewFilter使我能够在视图层中延迟加载实体。我正在扩展HibernateDaoSupport类,并使用HibernateTemplate保存/加载对象。一切都进行得很好。直至现在。 问题:我有一个可以通过Web

  • 问题内容: 当我按如下方式调用session.begin事务方法时: 然后我得到以下异常消息 造成此错误的原因是什么? 问题答案: 更新: 我想调用并不能保证该会话实际上是打开的。第一次,您应该使用 代替。该建议实际上与您找到的页面一致。 之前: 根据到目前为止的可用信息,我们可以得出结论,错误的原因是会话未打开;-)

  • 问题内容: 下面的函数是我在Web应用程序中具有的按钮的actionListener,我正在从数据库中的表中删除旧选择的行,并将新行插入数据库中。 我一直在例外:会话关闭!有人可以解释一下如何在hibernate状态下关闭会话(自动吗?)以及如何使用它们。 这是该异常的详细堆栈跟踪: 谢谢, 问题答案: 在Hibernate会话显然配置为基于请求的情况下,您在会话范围内的受管Bean中使用了延迟获

  • 问题内容: 一个只有一个数据库的hibernate会话将保持多少个连接? 问题答案: 在给定的时间,给定的会话将仅保留一个连接,您可以使用connect()方法进行访问。 使用reconnect()方法可以更改所使用的连接。

  • 问题内容: 我刚刚有了Hibernate Session和Connection之间的关系。但是现在,我又遇到一个问题:hibernate会话工厂如何管理会话?在以下代码段中:DAO类的save()方法: 当我们调用时,它将创建一个新会话(通过ThreadLocal附加到当前线程),该会话也附加到JDBC连接。但是,正如您所看到的,我们不需要关闭该会话(会话。 close()),都没有连接。那么,H

  • 问题内容: 我该如何决定使用哪个? , , , 。 我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但没有足够详细地解释。 问题答案: 在Hibernate文档确实在他们定义了很好的工作: 19.2.2。策略:只读 如果您的应用程序需要读取而不是修改持久类