问题标签 [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.
java - “缓存项被锁定”导致休眠中的 Select 语句
我无法完全按照我想要的方式获得一些缓存来使用休眠。我创建了一些示例代码来复制我遇到的这个问题。
我有一个包含自身实例的对象。例如,由多个 Part 组成的 Part。
当更新的对象进入时,我真的需要最小化 Hibernate 正在使用的 select 语句。在查看日志后,我看到导致 SELECT 语句的日志输出:
缓存项被锁定:com.cache.dataobject.Part.parts#1
我可以在注释映射、xml 文件、缓存提供程序或逻辑中进行哪些更改以防止缓存项被锁定?我真的很想摆脱那个选择语句。
我包括了实体、数据对象、我正在测试的代码和日志输出。
休眠版本: 3.4
EHCache 版本: 1.2.3(包含在 Hibernate 下载中)
部分数据对象:
缓存道:
测试客户端代码:
持久性.xml
EhCache.xml
输出日志:
nhibernate - 具有流畅映射和 Syscache2 二级缓存的 NHibernate
我有一个非常简单的 Country 实体,我想缓存它。这非常有效,但我希望返回缓存实例的克隆版本或将其设为只读,以防止开发人员更改它的状态。
我将如何实现这一目标?我认为 Fluent Readonly() 方法会强制执行此操作,但事实并非如此。
流利映射示例:
我的单元测试清楚地表明实体已缓存,并且在后续获取时返回相同的实体,但我希望对象在从持久存储加载后是不可变的。
谢谢!
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 并发策略。
提前致谢!!!
科威
java - 如何在不更改注释的情况下禁用 Hibernate 中某些实体的二级缓存
我在我的应用程序中使用 Hibernate 二级缓存,由于某些业务原因,我不能再更改实体注释。
在我的项目中,除了从 Hibernate 更改数据库之外,还存在其他不通过 Hibernate 的原生 SQL。因此,从本地 SQL 更新数据库后,Hibernate 二级缓存数据可能会过时。这就是为什么我要禁用某些实体的二级缓存(以编程方式或除更改注释之外的其他方式)。
提前致谢!
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中读取?
java - 如何在 ehcache.xml 中配置 QueryCache
从我的 sql 日志文件中,我认为 QueryCache 的物理属性是由元素配置的:
甚至我在ehcache.xml中添加了另一个元素,从 sql 日志看来,QueryCache 的物理属性仍然由元素。
我只想在内存中启用 QueryCache,同时默认禁用其他(在内存中)。也许是name属性元素不正确?我从书<>复制它。或者,我应该使用除 之外的其他元素吗?也许有一种元素?
谢谢。
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 类中使用其他代码(如任何注释或其他东西)
hibernate - 休眠:批处理大小?二级缓存?
我有一个由应用程序的不同部分加载的 Hibernate 域对象。有时延迟加载每个关联是有利的,而其他关联则最好在一个连接中加载整个事物。作为一个有希望的妥协,我发现:
使用批量获取,如果访问一个代理,Hibernate 可以加载多个未初始化的代理。批量抓取是对惰性选择抓取策略的优化。
hibernate.default_batch_fetch_size
:
使用批量获取,如果访问一个代理,Hibernate 可以加载多个未初始化的代理。批量抓取是对惰性选择抓取策略的优化。
我还看到:
hibernate.jdbc.fetch_size
:
非零值确定 JDBC 提取大小(调用 Statement.setFetchSize())。
那么 Hibernate 是否足够聪明,可以在批量获取时查看二级缓存?即为对关联的初始调用进行一次获取,然后下一个 X 调用命中缓存?这样我就可以进行我想要的延迟加载,但也可以经常访问缓存以进行更多类似批量的事务。
如果集合的全部内容已经包含在缓存中,它还会在访问集合时执行获取查询吗?
谢谢。
hibernate - 集群上的休眠 L2 缓存
Q1:我说的对吗?只有这家供应商支持集群上的 Hibernate L2 缓存吗?
- 冬眠兵马俑(商业)
- SwarmCache(自 2003 年以来未发布)
- JBoss 缓存 1.x
- JBoss 缓存 2
Q2: Hibernate L2 缓存有什么替代品吗?(也许一些数据库缓存?)
hibernate - Hibernate 中的事务 L2 缓存
Q1: “交易”策略保证什么?
Q2: 以JTA为事务管理器(由属性指定)的“事务”策略和“读/写”策略有什么区别。
Q3: 如果我在 .hbm.xml 文件中为某些实体指定“事务”策略,然后将使用不支持“事务”策略的 L2 缓存怎么办?