问题标签 [hibernate-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 投票
0 回答
152 浏览

jboss - Infinispan - Hibernate 2nd Level Cache Cluster Marshaling 问题

我们正在尝试将 infinispan 配置为 Jboss EAP 7.1 中 Hibernate 的二级缓存,并在集群的两个节点设置中运行 jboss。

查找缓存元素有效,但如果我们更新休眠实体,则由 infinispan 触发的更新缓存步骤在两个节点上都会失败,并出现我们尝试更新的实体的编组错误(由找不到类异常引​​起)。

这是配置:

在 hibernate-cfg.xml org.hibernate.cache.infinispan.InfinispanRegionFactory

在示例实体 hbm.xml

在 jboss 独立-ha.xml 中

错误 :

15:02:45,974 WARN [org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher](OOB-20,XXX-53994)ISPN000220:从字节缓冲区解组远程命令时出现问题:java.lang.ClassNotFoundException:com.business。来自本地模块加载器@64d2d351(查找器:本地模块查找器@1b68b9a4(根:C:\jboss-eap-7.1\NodeA\modules,C:\jboss-eap- 7.1\NodeA\modules\system\layers\base.overlays\layer-base-jboss-eap-7.1.5.CP,C:\jboss-eap-7.1\NodeA\modules\system\layers\base,C:\ jboss-eap-7.1\DEV\modules))] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412) 的 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198) .modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400) at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.jboss .marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:123) 在 org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:104) 在 org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:1022) 在org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1355) 在 org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272) 在 org.jboss.marshalling.river.RiverUnmarshaller.doReadObject( RiverUnmarshaller.java:220) 在 org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:第 1853 章.doReadObject(RiverUnmarshaller.java:272) 在 org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:205) 在 org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41) 在 org.infinispan。 commons.marshall.MarshallUtil.unmarshallArray(MarshallUtil.java:159) at org.infinispan.commands.write.InvalidateCommand.readFrom(InvalidateCommand.java:109) at org.hibernate.cache.infinispan.util.BeginInvalidationCommand.readFrom(BeginInvalidationCommand. java:47) 在 org.infinispan.marshall.exts.ReplicableCommandExternalizer。readCommandParameters(ReplicableCommandExternalizer.java:113) at org.infinispan.marshall.exts.ReplicableCommandExternalizer.readObject(ReplicableCommandExternalizer.java:89) at org.infinispan.marshall.exts.ReplicableCommandExternalizer.readObject(ReplicableCommandExternalizer.java:41) at org.infinispan .marshall.core.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:479) 在 org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:236) 在 org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject (JBossMarshaller.java:149) 在 org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:205) 的 org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:350)。编组.AbstractObjectInput。readObject(AbstractObjectInput.java:41) at org.infinispan.commands.remote.SingleRpcCommand.readFrom(SingleRpcCommand.java:46) at org.infinispan.marshall.exts.ReplicableCommandExternalizer.readCommandParameters(ReplicableCommandExternalizer.java:113) at org.infinispan .marshall.exts.CacheRpcCommandExternalizer.readObject(CacheRpcCommandExternalizer.java:173) at org.infinispan.marshall.exts.CacheRpcCommandExternalizer.readObject(CacheRpcCommandExternalizer.java:68) at org.infinispan.marshall.core.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable .java:479) 在 org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:149) 在 org.jboss 的 org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:236)。 marshalling.river.RiverUnmarshaller。doReadObject(RiverUnmarshaller.java:350) 在 org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:205) 在 org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41) 在 org.infinispan.commons .marshall.jboss.AbstractJBossMarshaller.objectFromObjectStream(AbstractJBossMarshaller.java:134) 在 org.infinispan.marshall.core.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:101) 在 org.infinispan.commons.marshall.AbstractDelegatingMarshaller.objectFromByteBuffer(AbstractDelegating.java :80) 在 org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:163) 在 org.jgroups 的 org.infinispan.remoting.transport.jgroups.MarshallerAdapter.objectFromBuffer(MarshallerAdapter.java:28)。块。RequestCorrelator.handleRequest(RequestCorrelator.java:455) at org.jgroups.blocks.RequestCorrelator.dispatch(RequestCorrelator.java:406) at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:357) at org.jgroups.blocks org.jgroups 的 org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:664) 的 .RequestCorrelator.receive(RequestCorrelator.java:245) org.jgroups 的 org.jgroups.JChannel.up(JChannel.java:738)。 stack.ProtocolStack.up(ProtocolStack.java:1030) at org.jgroups.protocols.FRAG2.up(FRAG2.java:165) at org.jgroups.protocols.FlowControl.up(FlowControl.java:390) at org.jgroups .protocols.pbcast.GMS.up(GMS.java:1037) 在 org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:234) 在 org.jgroups.protocols.UNICAST3.deliverMessage(UNICAST3.java:1077 ) 在 org.jgroups.protocols。UNICAST3.handleDataReceived(UNICAST3.java:792) at org.jgroups.protocols.pbcast.NAKACK2.up(NAKACK2.java:649) at org.jgroups.UNICAST3.up(UNICAST3.java:433) at org.jgroups .protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:155) 在 org.jgroups.protocols.FD_ALL.up(FD_ALL.java:200) 在 org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:325) 在 org. jgroups.protocols.MERGE3.up(MERGE3.java:292) at org.jgroups.protocols.Discovery.up(Discovery.java:296) at org.jgroups.protocols.MPING.up(MPING.java:178) at org .jgroups.protocols.TP.passMessageUp(TP.java:1658) 在 org.jgroups.protocols.TP$SingleMessageHandler.run(TP.java:1876)VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:155) 在 org.jgroups.protocols.FD_ALL.up(FD_ALL.java:200) 在 org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:325) 在 org.jgroups.protocols .MERGE3.up(MERGE3.java:292) 在 org.jgroups.protocols.Discovery.up(Discovery.java:296) 在 org.jgroups.MPING.up(MPING.java:178) 在 org.jgroups。 org.jgroups.protocols.TP$SingleMessageHandler.run(TP.java:1876) 上的协议.TP.passMessageUp(TP.java:1658)VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:155) 在 org.jgroups.protocols.FD_ALL.up(FD_ALL.java:200) 在 org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:325) 在 org.jgroups.protocols .MERGE3.up(MERGE3.java:292) 在 org.jgroups.protocols.Discovery.up(Discovery.java:296) 在 org.jgroups.MPING.up(MPING.java:178) 在 org.jgroups。 org.jgroups.protocols.TP$SingleMessageHandler.run(TP.java:1876) 上的协议.TP.passMessageUp(TP.java:1658)jgroups.protocols.TP$SingleMessageHandler.run(TP.java:1876)jgroups.protocols.TP$SingleMessageHandler.run(TP.java:1876)

谢谢 Santhosh S

0 投票
0 回答
86 浏览

java - Hibernate 从缓存中返回错误的列表,即使预期的列表与缓存的列表不同

在下面的代码中,如果我不清除当前会话,即使我想返回该父母的所有孩子的数量,该方法也会返回女孩的数量。

可以清楚地看到,id 为 1 的父母有 3 个孩子(2 个女孩和 1 个男孩),但只返回女孩,因为之前的检索方法只返回有女孩的父母。当我清除会话以避免从缓存返回时,它按预期返回 3。谁能帮我理解为什么会这样,在不清除当前会话的情况下如何避免这种情况?

让我分享我拥有的所有代码以及数据库脚本以使其更清晰。

存储库:

实体:


数据库配置:

脚本

运行代码时生成的脚本:

休眠版本:5.4.5.Final

0 投票
0 回答
144 浏览

java - Hibernate 二级缓存不适用于 OneToOne 关联

我正在尝试启用 Hibernate 的二级缓存,但无法避免针对 OneToOne 关系发出多个查询。

我的模型是:

当我在缓存中使用 id运行session.get(Business.class, id)时,不会发出加载查询,但会发出.BusinessidBusinessAddress

我知道 Address 是关系所有者,并且在 Business 缓存条目中没有Address.id信息,但是通过应用与 *ToMany 关系相同的机制,为每个字段创建一个新的缓存区域,不能解决这个问题吗?假设业务 1 与地址 2 相关,在第一次加载后,我的缓存中会有以下区域和条目:

我试图通过使用注释Address.business@NaturalId使用. 缓存区域已创建并填充,但不使用它。Address@NaturalIdCachesession.get(Business.class, id)

我的Business模型有更多的 OneToOne 关系,其外键在另一端(不是业务),我们必须一次列出几个,因此数据库服务器必须处理每个 HTTP 请求的数十个查询。

我已经阅读了 Hibernate 的用户指南、Vlad Mihalcea 对 2LC 及其内存脱水格式的解释、Baeldung 的解释以及其他几个 StackOverflow 答案,但找不到解决此问题的方法。

0 投票
1 回答
354 浏览

hibernate - 当条件暗示日期时,休眠查询缓存不起作用

我有以下查询:

当我调用两次时,我希望查询缓存会被命中,但是它不起作用。

但是,如果我删除第二个谓词

缓存可以正常工作。

原因是什么?

编辑

类定义:

我正在使用休眠 5.3.12.Final

0 投票
0 回答
166 浏览

hibernate - 带有 Hibernate 二级缓存的自然 ID

我正在开发一个使用 Hibernate 作为 ORM 的 Spring Boot 项目。我启用了 Hibernate 二级缓存。我有一个名为 Country 的实体。在国家/地区,我有一个自然 ID,并且我启用了基于自然 ID 的缓存。

当我使用 findByCountryCode(String countryCode) 方法查询国家/地区时,它一直在访问数据库。谁能告诉我我在这里做错了什么?

0 投票
1 回答
319 浏览

spring-boot - Spring Boot 应用程序和 Hazelcast NearCache

我正在尝试将 Hazelcast 缓存与 Spring Boot 一起使用,阅读了一些文档后我决定解决 Near Cache 配置,我想缓存一些方法调用并将其用于 Hibernate L2 缓存.. 问题是我还没有完全看到使用 Near Cache 的示例,专门创建 Near 缓存客户端并启动服务器。我可以提供一些代码示例来配置该设置(近缓存配置)以及如何启动服务器端。

0 投票
1 回答
229 浏览

hibernate - 像 ehcache / redis 这样的外部缓存在哪里适合 wrt hibernate level 1 / level 2 缓存?

Hibernate(以及作为 Hibernate 的包装器的 JPA)提供了两个级别的缓存机制。a) 一级缓存,位于会话对象层/级别 b) 二级缓存,位于会话工厂层/级别

如果我使用的是 redis 或 ehcache 等外部缓存,那么这个缓存在上面的哪个位置。或者我应该禁用 2 级缓存以启用 redis/ehcache。不确定外部缓存如何以及在何处适合 1 级和 2 级缓存。

或者 - 是否可以进行各种配置?

有人可以解释一下。提前致谢。

0 投票
0 回答
70 浏览

java - 缓存其他实体映射的关系

我正在尝试缓存一些仅在服务器关闭时才会更改的实体。这是一个例子:

这很好用。

但是当我添加反向关系时,我看到休眠查询该关系的数据库。

如果我将其声明为 EAGER 或 LAZY,则没有区别。

如何配置我的 Cache / Entity / Relations ,以便完全缓存 Season Entity 包括“下一个”和“上一个”关系?

如果有办法使用 JPA 的 @Cacheable 做到这一点,我会更喜欢。

0 投票
2 回答
211 浏览

spring-boot - 从 Hibernate 2 级缓存中获取 @EntityGraph 时出现 LazyInitializationException

我正在使用 Spring Data JPA 开发 Spring Boot 2.3.4 Web 应用程序。

我想将 Hibernate 2 级查询缓存用于带有 @EntityGraph 的存储库方法。但是,如果数据已经在二级缓存中,除非我打开了 Spring 的 Open Session In View,否则在生成 Thymeleaf 视图时会出现 LazyInitializationException。第一次从数据库或没有二级缓存的情况下获取数据时,即使 spring.jpa.open-in-view=false 也一切正常。此外,如果我启用 spring.jpa.open-in-view 从缓存中获取数据而不选择数据库时也不例外。

使用 Hibernate 二级缓存时,如何让 Hibernate 一次获取 @EntityGraph 中指定的所有关联?

这是我的存储库方法:

和实体的一部分:

}

0 投票
1 回答
127 浏览

java - Hibernate L2 cache issues with EntityGraph and LEFT JOIN FETCH queries

I'm using hibernate 5.3.14 with hazelcast 3.11.5 as L2 cache provider and spring boot 2.1.11.

I have 3 entities defined with relations:

  • one order has many order items
  • one order has many custom fields L2 cache is enabled for entities, associations and queries.

I have one repository:

There are 3 problems:

  1. repo method findById doesn't load from the cache the main entity, order, with the relation, customFields, indicated by entity graph loaded

  2. cached query results for repo method findAllActiveWithOrderItems does not seem to have the relations, orderItems, loaded by the FETCH JOIN

  3. cached query results for repo method findAllActiveWithOrderItems does not seem to have the relations loaded by the the EntityGraph, customFields

Are there any known hibernate tickets or workarounds to fix those?