Hibernate没有注意到从其他源创建的数据库更新

时间:2009-08-13 12:32:08

标签: java hibernate caching

我有一个由.net客户端和java Web服务组成的小型系统。

.net客户端将对象插入数据库,然后调用Web服务。 Web服务尝试使用hibernate检索此对象。第一次它工作正常,但每隔一次它就说没有给定标识符的对象。

我手动检查了数据库,确实存在行! (我调试了Web服务并在会话打开之前检查了行。)

将此添加到hibernate配置文件

<property name="connection.isolation">1</property>

这是我到目前为止所尝试的内容:

  1. 禁用二级缓存
  2. 添加.setCacheMode(CacheMode.REFRESH)
  3. 这是失败的代码:

    Session session = Program.HibernateUtil.getSessionFactory().openSession();      
    try    
    {
        return (Alert)session.load(Alert.class, id);                           
    } ...
    

3 个答案:

答案 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