8
我想缓存Hibernate的第二级缓存中的一个对象,该对象具有映射到我的持久性映射文件中的复合标识。日志说,我第一次运行查询时,映射为composite-id的类被放入缓存中。但是,当我第二次运行查询时,该对象不会从缓存中提取。而是再次运行查询。休眠第二级缓存复合编号
Hibernate对二级缓存组合ID有问题吗?
相关信息:
- 使用Hibernate 3.1的Ehcache 2.4.2
- 复合ID类实现Serializable
- 运行查询时,第二次
- 我我使用一个新的Hibernate Session我正在使用hibernateTemplate.load(Class,ID)来检索对象
这就是我如何构建我的I d和执行我的查询:
CompositeId id = new CompositeId(date, sessionId);
UserDetails user = (UserDetails) hibernateTemplate.load(UserDetails.class, id);
这是我的坚持,映射文件如何定义上面:
<class name="com.entities.UserDetails"
table="USER_DETAILS"
lazy="false">
<cache usage="read-write"/>
<composite-id name="userId" class="com.entities.CompositeId" unsaved-value="undefined">
<key-property name="userSessionId" column="SESSION_ID" />
<key-property name="dateCreated" column="DATE_CREATED" type="date" />
</composite-id>
编辑:情节复杂....
当我改变了这种到只读缓存策略,它工作正常。事务性缓存行为似乎非常不可预测。任何人都可以解释为什么上述情况发生在读写缓存中,但是以只读方式工作正常吗?这张表没有被更新,所以不知道为什么事务性语义会改变这种情况。
你的复合id类是否正确实现了equals()'/'hashCode()'? – axtavt 2011-06-16 20:08:49
是的,对不起,我也应该补充一点。它实现了两者。 – sma 2011-06-16 20:15:47
既是复合标识又是实体Serializable? – Augusto 2011-06-16 20:24:24