我有一个由.net客户端和java Web服务组成的小型系统。
.net客户端将对象插入数据库,然后调用Web服务。 Web服务尝试使用hibernate检索此对象。第一次它工作正常,但每隔一次它就说没有给定标识符的对象。
我手动检查了数据库,确实存在行! (我调试了Web服务并在会话打开之前检查了行。)
解
将此添加到hibernate配置文件
<property name="connection.isolation">1</property>
这是我到目前为止所尝试的内容:
这是失败的代码:
Session session = Program.HibernateUtil.getSessionFactory().openSession();
try
{
return (Alert)session.load(Alert.class, id);
} ...
答案 0 :(得分:2)
看起来应该禁用二级缓存(与会话工厂关联的缓存),因此我唯一可以建议的是通过调用显式清除缓存:
sessionFactory.evict(Alert.class)
注意:阅读完整答案的评论。
答案 1 :(得分:1)
首先,请勿使用Session.load()
,请使用Session.get()
。 load()
只应在非常特殊的情况下使用,而这不是其中之一。
其次,您是否在同一会话中执行这两项操作?如果是这样,Hibernate将在第一次操作后缓存实体。没有办法阻止它这样做。但是,您可以在会话中使用evict()
来强制将实体踢出会话缓存。
答案 2 :(得分:0)
尝试设置此hibernate属性:
hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider