JavaHibernate没有注意到从其他源进行的数据库更新
我有一个小系统,由一个。net客户端和java web服务
这个。net客户端将对象插入数据库,然后调用web服务。web服务尝试使用hibernate检索此对象。第一次它工作正常,但每隔一次它都会说没有具有给定标识符的对象
我已经手动检查了数据库,行确实在那里!(甚至在打开会话之前,我就调试了web服务并检查了行)
解决方案
将其添加到hibernate配置文件中
<property name="connection.isolation">1</property>
以下是我迄今为止所尝试的:
- 二级缓存已禁用
- 补充说。setCacheMode(CacheMode.REFRESH)
下面是失败的代码:
Session session = Program.HibernateUtil.getSessionFactory().openSession();
try
{
return (Alert)session.load(Alert.class, id);
} ...
# 1 楼答案
首先,不要使用
Session.load()
,使用Session.get()
load()
只应在非常特殊的情况下使用,而这不是其中之一其次,您是否在同一个会话中执行这两个操作?如果是这样,Hibernate将在第一次操作后缓存实体。没有办法阻止它这么做。但是,您可以在会话上使用
evict()
强制将实体从会话缓存中踢出# 2 楼答案
看起来应该禁用二级缓存(与会话工厂关联的缓存),所以我唯一能建议的另一件事是通过调用显式清除缓存:
注意:阅读评论获取完整答案
# 3 楼答案
尝试设置此hibernate属性:
冬眠。隐藏物provider_class=org。冬眠隐藏物NoCacheProvider