Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 更新问题_Hibernate_Jpa - Fatal编程技术网

Hibernate 更新问题

Hibernate 更新问题,hibernate,jpa,Hibernate,Jpa,我试图更新一个应用程序上的一些数据,并将JMS事件发送到不同的JBOSS服务器。 侦听器将获取事件,并尝试使用带有dblink的数据库视图读取数据 最初,此视图没有该ID的数据。我使用其他应用程序更新数据,安装后,JMS事件将与该ID一起发送。侦听器收到此ID后,它将使用数据库视图获取数据 我的问题是,当使用JPA/HIBERNATE进行读取时,它仍然在读取作为空白的旧数据 调用dao层的服务层正在使用以下转换 @Transactional(readOnly = true, propag

我试图更新一个应用程序上的一些数据,并将JMS事件发送到不同的JBOSS服务器。 侦听器将获取事件,并尝试使用带有dblink的数据库视图读取数据

最初,此视图没有该ID的数据。我使用其他应用程序更新数据,安装后,JMS事件将与该ID一起发送。侦听器收到此ID后,它将使用数据库视图获取数据

我的问题是,当使用JPA/HIBERNATE进行读取时,它仍然在读取作为空白的旧数据

调用dao层的服务层正在使用以下转换

    @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)

    The DAO Layer is using 
    @PersistenceContext
    private EntityManager em;

    Query query = em.createNativeQuery(sbQuery.toString());
我尝试了以下所有选项,但似乎没有效果

    em.clear();
    em.getEntityManagerFactory().getCache().evictAll();
    em.flush();
    query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.BYPASS);
注意:它工作的唯一方式是,在我收到事件后,如果我使用StarightJDBC,我可以从该视图中获取数据,但是使用spring/hibernate配置,它的提交为空


有没有想过为什么它不能正常工作,为什么我需要对调用执行Starlight jdbc?

这看起来像是一个标准场景,在提交发送方事务之前接收消息。要使其工作,您需要在事务提交后发送消息。使用spring,您可以通过TransactionSynchronization实现这一点:


其中MessageQueueTransactionSynchronization实现TransactionSynchronization并在完成后发送消息。。通过status=TransactionSynchronization触发。status\u COMMITTED

是否配置了二级缓存?并摆脱不受支持的传播不,我没有任何第二级将尝试摆脱不受支持的配置谢谢你的答复。我做了两次测试,以确保只有在提交数据之后才收到事件。我测试的方法是,一旦我从监听器的onMessage方法接收到事件,我就用直接的JDBC查询,从视图中检索数据,而没有到服务层的Spring传输路径,它似乎正在工作。我唯一的解决方法就是使用StarightJDBC调用视图,然后离开它,然后调用服务层来获取视图中的实际数据。我仍然不明白为什么在调用服务层来从视图中获取数据之前,我需要调用直联jdbc来调用视图。如果我不直接使用jdbc调用视图,如果我直接使用Spring事务服务层,我可以看到数据确实是nulit的奇数。这是否发生在发送方和接收方的同一台计算机上?并检查您是否出于某种原因重用相同的hibernate会话/实体管理器Tanks Bozho,但运气不好,但我认为我没有使用相同的会话,真的怀疑hibernate JPA配置MessageQueueTransactionSynchronization是您实现spring事务同步的一个类
TransactionSynchronizationManager.registerSynchronization(new  
         MessageQueueTransactionSynchronization(jmsSender, message));