- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
与此相关question
前提:
这些是我的假设,基于我的阅读、经验和理解,它们可能是错误的,如果是,请发表评论,我会编辑问题。
问题:
我有一个不在二级缓存中的对象。由于一些错误的编程或其他限制,加载对象的代码在同一个 hibernate session 中被多次调用。检索使用 HQL 查找查询例如
hibernateTemplate.find("from Foo f where f.bar > ?", bar);
在添加查询缓存之前,如果在同一个 Hibernate Session 中调用上述代码 N 次,则对数据库有 N 次命中
然后我想看看如果添加查询缓存会发生什么:
Query query = session.createQuery("from Foo f where f.bar > ?");
query.setCacheable(true);
query.setParameter(bar);
query.list();
当我添加查询缓存时,我注意到在同一个 session 期间,hibernate 不再访问数据库 N 次,每个 session 只访问一次。
Foo
)在数据库中发生了更改,那么跨 session 范围的查询缓存将返回错误的标识符,因此对象是错误的。这是正确的吗?顺便说一句,在相关question据称查询缓存不适用于 session 缓存范围。我是否误解了这个说法,或者其他什么?
最佳答案
查询缓存是一种特殊类型的二级缓存。您所说的二级缓存我更愿意称之为“对象缓存”。
对你的假设的评论:
- Query cache is good mostly along with 2nd level cache (aka object cache).
查询缓存仅将查询的原始结果作为主键(在 Hibernate 中称为 id)保存。它不容纳实际的水合物体。这是有道理的,因为当您使用 jdbc 执行查询时,它实际上只会在您迭代 ResultSet 时返回水合(填充)对象。该说法不一定正确。如果查询非常复杂,因此需要很长时间才能运行,那么通过使用查询缓存可以节省时间。通过使用查询缓存,您不会节省从数据库加载对象所需的时间。
- Query cache is risky if the database was changed, and it wasn't reflected to the cache
这是事实,但它并不是查询缓存所独有的,对于您所说的二级缓存(通常称为对象缓存)也是如此。
So my first assumption is that Hibernate first searches in the Session Cache, then in the 2nd Level Cache. Is this assumption correct?
是的,加载对象时就是这种行为。
I also assume that if the object (Foo) which is not in the 2nd level cache, was changed in the database, then query cache, being cross session scoped, will return the wrong identifiers, and thus the wrong objects. Is that correct?
是的,对象缓存和查询缓存都会受到影响。仅当数据库在未通过 hibernate 状态进行更改时才需要关注。您可以通过设置查询缓存的超时来减轻这种影响。
Is it then safe to say that using query cache for queries that include immutable information even for non 2L cached objects, is a good practice? (e.g. a query that its where clause contains a condition that will always return the same results, e.g. "select p.ser_num where p.id = ?" when ser_num and id couples do not change once created)
对于这些类型的对象,没有理由不同时使用对象缓存和查询缓存。
是的,查询缓存在 session 级别(即 1 级缓存)下不起作用。这就是为什么当您再次执行查询时它会再次访问数据库的原因。它不会将查询结果(id 集)放入 session 缓存中。
关于Hibernate 查询缓存 - 对于不在二级缓存中的对象 - 有风险吗?有用?不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1998326/
非常简单的应用程序 - 您可以复制 - 粘贴 - 运行。主要只是“创建”应用程序。 - 这不是问题(可能) #include #include #include #include typede
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
Haskell 有一个名为 seq 的神奇函数,它接受任何类型的参数并将其简化为弱头范式 (WHNF)。 我读过一些资料[但我现在不记得他们是谁了...],它们声称“多态 seq 很糟糕”。他们在哪些
我正在编写一个脚本,该脚本应该在一堆服务器周围运行并从中选择一堆数据,包括本地服务器。选择我需要的数据所需的 SQL 非常复杂,所以我正在编写一种临时 View ,并使用 OPENQUERY 语句来获
考虑以下代码: case class Vector3(var x: Float, var y: Float, var z: Float) { def add(v: Vector3): Unit =
我正在读这个SO post关于守护线程,答案底部的引述是: But joining a demonized thread opens most likely a whole can of troubl
在阅读有关 Google webtool 工具包的内容时,看到一条声明说“同步 RPC 不好”。他们有什么理由吗?我能想到的一个很好的理由是,对最终用户的响应可能会受到远程服务器延迟或网络问题的影
我有以下 HTML: A Simple Sample Web Page By Sheldon Brown Demonstrating a few HTML feat
我正在做一项简单的任务,但我陷入困境...... output 我需要使第一行与其他所有内容保持一致,但无论我做什么,它都不想接受空格。那么,我应该纠正什么以及为什么?谢谢 public static
我在系统中有一个类,其目的列为“这可以是从午夜算起的秒数。或者带有日期的时间。”我试图解释这有多糟糕,但我无法理解我的观点。有没有人对如何解决这个问题有任何想法。 http://code-slim-j
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: When are C++ macros beneficial? Why is #define bad and
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
始终建议通过将所有代码放在 JS 文件中来避免内联 Javascript 代码,该文件包含在所有页面中。我想知道,这是否不会导致繁重的页面出现性能问题。 例如,假设我们有几十个这样的函数 functi
我主要在 AngularJS 中进行开发,最近我正在研究 Vue.js 并阅读它的指南,在它提到的一页上: By default, all props form a one-way-down bind
我正在构建一个本地化目录,但遇到了设计难题。现在,目录存储一个 Dictionary存储翻译,其中 IString可以是两种类型:Singular或 Plural .这是 IString 的简化版本:
对于我的矩阵类,我做了: template class Matrix { private: std::array, Height> Elements; stat
MSDN documentation说 public class SomeObject { public void SomeOperation() { lock(this) {
建议不要在 Python 中使用 import *。 谁能分享一下原因,这样我下次就可以避免了? 最佳答案 因为它会将很多东西放入您的命名空间(可能会影响之前导入的一些其他对象,而您不会知道它)。 因
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
G'day, 这与my question on star developers有关并到 this question regarding telling someone that they're wri
我是一名优秀的程序员,十分优秀!