我使用的是java 1.6,spring 2.5,hibernate 3.3.1和ehcache 2.6.0。程序连接到两个数据库。有两种ehcache配置,但在这种情况下只使用一种。 在批处理结束时,程序返回此错误:
2012-10-23 15:44:43,406 ERROR (AbstractReadWriteEhcacheAccessStrategy.java:159) - Cache dao.data.MyObject Key dao.data.MyObject#28 Lockable : null
A soft-locked cache entry was removed already. Out of balance lock/unlock sequences ?
什么可以产生这个错误?
答案 0 :(得分:3)
我现在正受到这种打击,所以我会分享我的发现。
首先,一些背景知识:
通过调试Hibernate和EhCache代码我发现了什么:
在我看来,这是在lockItem()和unlockItem()的EhCache实现中的一个问题(在READ_WRITE情况下)。它不应该用锁替换实际项目,而是分别存储锁。至少,可以说Hibernate和EhCache在这种情况下不是100%兼容。
最后几点说明:
HTH
答案 1 :(得分:2)
当我使用createSQLQuery(Native SQL Query)时,我遇到了同样的问题。感谢这个Impact of native sql queries on hibernate's second level cache,我解决了我的问题。
从链接:主要原因是本机查询可以使第二级缓存无效。链接底部还有解决方案,以防止在使用本机sql查询时hibernate使L2缓存无效。