当前位置: 首页 > 知识库问答 >
问题:

具有Hibernate和ehCache配置的事务问题

景建业
2023-03-14

在我的hibernate映射中,我将缓存使用作为只读

<class name="cdot.ctms.layer.services.dispatch.data.DispatchMapDTO"
        table="DISPATCH_MAP" mutable="false" optimistic-lock="version">
        <cache usage="read-only"/>

在ehcache.xml中,默认缓存设置为

<defaultCache
            maxEntriesLocalHeap="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            diskSpoolBufferSizeMB="30"
            maxEntriesLocalDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            transactionalMode="xa_strict">
        <persistence strategy="localTempSwap"/>
    </defaultCache>

当我的对象获取默认缓存时,它会运行到事务回滚问题中。

如果我为我引用的对象显式添加缓存,我不会遇到任何问题。

<cache 
        name="cdot.ctms.layer.services.dispatch.data.DispatchMapDTO" 
        maxEntriesLocalHeap="100" 
        eternal="false"
        timeToLiveSeconds="300">
        <persistence strategy="localTempSwap" />
    </cache>

我们有很多DTO在应用程序中使用默认缓存。我必须在ehcache.xml中为每个对象定义缓存吗?在hibernate手册中找不到任何相关文档

http://docs.jboss.org/hibernate/orm/4.3/manual/en-us/html/ch20.html#性能-缓存-只读

共有1个答案

唐焕
2023-03-14

默认缓存配置和特定缓存配置之间存在差异。其中包括TimeToliveseconds

如果您也将默认缓存1设置为300会发生什么?

 类似资料:
  • 问题内容: 我正在尝试将(v2.6.0)添加到我的项目中,但是存在一些配置问题。具体来说,当我尝试使用以下命令构建配置时,出现了:错误 这是我的 Maven 依赖关系… 这是我用来配置它的Java代码… 这是可怕的错误。我缺少什么配置? 问题答案: ehcache-core文件基本上是针对Hibernate 3.x的。Hibernate 4.x带有自己的ehcache实现。您无需在hibernat

  • 问题内容: 我目前正在研究如何在ehcache中使用RMI分发选项。我已经正确配置了ehcache.xml,复制似乎可以正常工作。但是我有两个问题: ->似乎ehcache /hibernate为每个实体创建1个缓存。很好,但是当复制到位时,它会创建1个线程/缓存进行复制。这是预期的行为吗?由于我们的域很大,因此它创建了大约300个线程,在我看来,这确实很大 ->另一个令人讨厌的结果是,心跳消息似

  • 在net.sf.ehcache.config.ConfigurationFactory.Parseconfiguration(ConfigurationFactory.java:105) 在net.sf.ehcache.hibernate.hibernateutil.LoadandCorretConfiguration(Hibernateutil.java:51) 在net.sf.ehcache.

  • 在我们的应用程序中,我们使用Hibernate 3。最近我在交易中遇到了一个问题。我有一些代码如下方式 我有另一个与此相同的方法,即使该方法抛出异常,也会在该方法之后调用该方法。 两个方法的会话是相同的。 现在我所经历的是,如果我的第二个方法成功执行并提交hibernate事务,这将存储我不想要的保存在第一个方法中的数据。 我无法分享确切的代码,但我准备了一个与此问题类似的测试方法。我的数据库服务

  • 我们有一个正式服JVM堆问题。当我们进行堆转储并分析报告时,我们发现超过80%的堆大小被Ehache对象耗尽,服务器变得很慢。我们怀疑内存泄漏或积累缓存对象而没有清除旧缓存。该站点是非常大的容量站点,因此缓存的数量会增加。 我想回顾一下这种配置的含义,并建议这是否与该问题有关: 在Java类中,我有以下实现: 任何建议都将不胜感激。 更新:溢出ToDisk="true"的意义是什么。我没有配置任何

  • 我无意中发现我可以在对象上保留更改,即使我没有在事务中写入它们。我想知道这是怎么发生的,因为理论上,如果我不在事务中写入更改,我应该无法更改数据库中的年龄值。PS:如果我删除最后2行,它不会像预期的那样对db产生任何影响。