问题标签 [second-level-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
761 浏览

java - “缓存项被锁定”导致休眠中的 Select 语句

我无法完全按照我想要的方式获得一些缓存来使用休眠。我创建了一些示例代码来复制我遇到的这个问题。

我有一个包含自身实例的对象。例如,由多个 Part 组成的 Part。

当更新的对象进入时,我真的需要最小化 Hibernate 正在使用的 select 语句。在查看日志后,我看到导致 SELECT 语句的日志输出:

缓存项被锁定:com.cache.dataobject.Part.parts#1

我可以在注释映射、xml 文件、缓存提供程序或逻辑中进行哪些更改以防止缓存项被锁定?我真的很想摆脱那个选择语句。

我包括了实体、数据对象、我正在测试的代码和日志输出。

休眠版本: 3.4

EHCache 版本: 1.2.3(包含在 Hibernate 下载中)

部分数据对象:

缓存道:

测试客户端代码:

持久性.xml

EhCache.xml

输出日志:

0 投票
1 回答
2444 浏览

nhibernate - 具有流畅映射和 Syscache2 二级缓存的 NHibernate

我有一个非常简单的 Country 实体,我想缓存它。这非常有效,但我希望返回缓存实例的克隆版本或将其设为只读,以防止开发人员更改它的状态。

我将如何实现这一目标?我认为 Fluent Readonly() 方法会强制执行此操作,但事实并非如此。

流利映射示例:

我的单元测试清楚地表明实体已缓存,并且在后续获取时返回相同的实体,但我希望对象在从持久存储加载后是不可变的。

谢谢!

0 投票
3 回答
2106 浏览

java - orm.xml中的休眠二级缓存?

经过几个小时的谷歌搜索,我意识到用户可以使用 xml 文件(orm.xml,我想?)或 JPA 中的注释,或同时使用两者。我说的对吗?所以,我的项目使用了二级缓存,这在JPA规范中是没有的。我使用如下注释: @org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)

对于每个实体。但是,我猜上面的注解不属于JPA注解,因此,我不知道orm.xml中是否有任何等价的东西?我已经查看了 orm.xml 的 xml 架构,并且架构中不允许这样的休眠元素。

如果我不能在orm.xml中做二级缓存配置,除了注解还有什么办法吗?我不想做注释的原因是因为我有两个应用程序,一个使用 READ_WRITE 并发策略,另一个使用 READ_ONLY 并发策略。

提前致谢!!!

科威

0 投票
2 回答
13006 浏览

java - 如何在不更改注释的情况下禁用 Hibernate 中某些实体的二级缓存

我在我的应用程序中使用 Hibernate 二级缓存,由于某些业务原因,我不能再更改实体注释

在我的项目中,除了从 Hibernate 更改数据库之外,还存在其他不通过 Hibernate 的原生 SQL。因此,从本地 SQL 更新数据库后,Hibernate 二级缓存数据可能会过时。这就是为什么我要禁用某些实体的二级缓存(以编程方式或除更改注释之外的其他方式)。

提前致谢!

0 投票
2 回答
5691 浏览

java - Hibernate二级缓存ehcache.xml,实体的缓存设置不能读到HIbernate

为了清楚易懂,我有两个项目: 1. 一个实体项目,其中有这个项目中的所有实体类。2.一个项目,包含一个main()函数来运行应用程序,我的ehcache.xml放在这个项目的类路径下。

我的问题是:我可以更改 ehcache.xml 的defaultCache元素,并且可以从 SQL 日志文件中看到更改。但我认为 Hibernate 只读取了我的defaultCache元素,因为无论我在 ehcache.xml 的特定实体的缓存元素中发生什么变化,SQL 日志中都不会发生任何变化。

例如:如果我将defaultCache元素的maxElementsInMemory设置为0,无论我将实体的缓存元素的maxElementsInMemory设置为100还是0,都不会在二级缓存中缓存任何该实体。如果我将defaultCache元素的maxElementsInMemory设置为100,无论我将实体的缓存元素的maxElementsInMemory设置为100还是0,都会有该实体缓存在二级缓存中。

所以我认为也许实体的缓存元素的名称属性设置错误,无法从Hibernate中读取?

0 投票
1 回答
5720 浏览

java - 如何在 ehcache.xml 中配置 QueryCache

从我的 sql 日志文件中,我认为 QueryCache 的物理属性是由元素配置的:

甚至我在ehcache.xml中添加了另一个元素,从 sql 日志看来,QueryCache 的物理属性仍然由元素。

我只想在内存中启用 QueryCache,同时默认禁用其他(在内存中)。也许是name属性元素不正确?我从书<>复制它。或者,我应该使用除 之外的其他元素吗?也许有一种元素?

谢谢。

0 投票
2 回答
7006 浏览

hibernate - Hibernate 二级缓存 <>

我想在我的休眠项目中使用二级缓存,但我对休眠二级缓存了解一点,谁能解释我应该如何在我的代码中使用它以及我需要什么配置和 .jar 文件?我将这些设置设置为我的 hibernate.cfg.xml 文件

并添加这些 jar 文件ehcache-1.6.1.jar, ehcache-1.6.1-javadoc.jar, ehcache-1.6.1-sources.jar 我想知道我应该更改任何其他配置吗?

以及如何理解我的项目使用二级缓存?

如果只是把这个设置,休眠自动使用这个或者我必须在我的 .java 类中使用其他代码(如任何注释或其他东西)

0 投票
1 回答
2437 浏览

hibernate - 休眠:批处理大小?二级缓存?

我有一个由应用程序的不同部分加载的 Hibernate 域对象。有时延迟加载每个关联是有利的,而其他关联则最好在一个连接中加载整个事物。作为一个有希望的妥协,我发现:

使用批量获取,如果访问一个代理,Hibernate 可以加载多个未初始化的代理。批量抓取是对惰性选择抓取策略的优化。

hibernate.default_batch_fetch_size

使用批量获取,如果访问一个代理,Hibernate 可以加载多个未初始化的代理。批量抓取是对惰性选择抓取策略的优化。

我还看到:

hibernate.jdbc.fetch_size

非零值确定 JDBC 提取大小(调用 Statement.setFetchSize())。

那么 Hibernate 是否足够聪明,可以在批量获取时查看二级缓存?即为对关联的初始调用进行一次获取,然后下一个 X 调用命中缓存?这样我就可以进行我想要的延迟加载,但也可以经常访问缓存以进行更多类似批量的事务。

如果集合的全部内容已经包含在缓存中,它还会在访问集合时执行获取查询吗?

谢谢。

0 投票
4 回答
8208 浏览

hibernate - 集群上的休眠 L2 缓存

Q1:我说的对吗?只有这家供应商支持集群上的 Hibernate L2 缓存吗?

  • 冬眠兵马俑(商业)
  • SwarmCache(自 2003 年以来未发布)
  • JBoss 缓存 1.x
  • JBoss 缓存 2

Q2: Hibernate L2 缓存有什么替代品吗?(也许一些数据库缓存?)

0 投票
1 回答
407 浏览

hibernate - Hibernate 中的事务 L2 缓存

Q1: “交易”策略保证什么?

Q2: 以JTA为事务管理器(由属性指定)的“事务”策略和“读/写”策略有什么区别。

Q3: 如果我在 .hbm.xml 文件中为某些实体指定“事务”策略,然后将使用不支持“事务”策略的 L2 缓存怎么办?