有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaHibernate没有注意到从其他源进行的数据库更新

我有一个小系统,由一个。net客户端和java web服务

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

我已经手动检查了数据库,行确实在那里!(甚至在打开会话之前,我就调试了web服务并检查了行)

解决方案

将其添加到hibernate配置文件中

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

以下是我迄今为止所尝试的:

  1. 二级缓存已禁用
  2. 补充说。setCacheMode(CacheMode.REFRESH)

下面是失败的代码:

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

共 (3) 个答案

  1. # 1 楼答案

    首先,不要使用Session.load(),使用Session.get()load()只应在非常特殊的情况下使用,而这不是其中之一

    其次,您是否在同一个会话中执行这两个操作?如果是这样,Hibernate将在第一次操作后缓存实体。没有办法阻止它这么做。但是,您可以在会话上使用evict()强制将实体从会话缓存中踢出

  2. # 2 楼答案

    看起来应该禁用二级缓存(与会话工厂关联的缓存),所以我唯一能建议的另一件事是通过调用显式清除缓存:

    sessionFactory.evict(Alert.class) 
    

    注意:阅读评论获取完整答案

  3. # 3 楼答案

    尝试设置此hibernate属性:

    冬眠。隐藏物provider_class=org。冬眠隐藏物NoCacheProvider