sma*_*sma 8 hibernate ehcache second-level-cache composite-primary-key
我试图在Hibernate的二级缓存中缓存一个对象,该缓存在我的持久性映射文件中映射了一个复合id.日志说我第一次运行查询时,映射为composite-id的类被放入缓存中.但是,当我第二次运行查询时,不会从缓存中提取对象.而是再次运行查询.
Hibernate是否存在二级缓存复合ID的问题?
相关信息:
这就是我构建我的ID并执行我的查询的方式:
CompositeId id = new CompositeId(date, sessionId);
UserDetails user = (UserDetails) hibernateTemplate.load(UserDetails.class, id);
Run Code Online (Sandbox Code Playgroud)
这就是我的持久性映射文件定义上述内容的方式:
<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>
Run Code Online (Sandbox Code Playgroud)
编辑:情节变厚....
当我将其更改为只读缓存策略时,它工作正常.事务性缓存行为似乎极不可预测.任何人都可以解释为什么上述情况发生在读写缓存中,但在只读时运行良好吗?此表未更新,因此不确定为什么事务语义会改变该实例中的内容.
这看起来像是Hibernate 报告的错误。似乎作为一种解决方法,如果您使用复合键的相同实例(而不是.equals().
错误报告上还有一个补丁,您也许可以自己应用它并推出您自己的修补后的 Hibernate 版本。
| 归档时间: |
|
| 查看次数: |
2680 次 |
| 最近记录: |