我正在尝试在 Hibernate 的二级缓存中缓存一个对象,该对象在我的持久性映射文件中映射了一个复合 ID。日志说我第一次运行查询时,映射为复合 ID 的类被放入缓存中。但是,当我第二次运行查询时,不会从缓存中提取对象。相反,它再次运行查询。
Hibernate 二级缓存复合 id 有问题吗?
相关资料:
- 使用休眠 3.1、ehcache 2.4.2
- 复合ID类实现可序列化
- 第二次运行查询时,我正在使用新的 Hibernate 会话
- 我正在使用 hibernateTemplate.load(Class, ID) 来检索对象
这就是我构建 ID 和执行查询的方式:
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>
编辑:情节变厚了....
当我将其更改为只读缓存策略时,它运行良好。事务缓存行为似乎是极其不可预测的。任何人都可以解释为什么上述情况发生在读写缓存中,但在只读缓存中工作得很好?该表未更新,因此不确定为什么事务语义会在该实例中改变事物。