Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Jpa em.flush数据通过sql developer不可见_Jpa_Entitymanager - Fatal编程技术网

Jpa em.flush数据通过sql developer不可见

Jpa em.flush数据通过sql developer不可见,jpa,entitymanager,Jpa,Entitymanager,这可能是一个简单的问题 在我的代码中,我正在执行 user = em.find(User,pk); user.setName("name"); em.flush(); 使用调试器执行此flush()状态集后,我停止使用断点。现在,我使用我的SQLDeveloper工具检查是否在DB中进行了更改。我看不到DB中完成的更改 这对于flush命令意味着什么 刷新生成的sql将被发送到DB,但在DB上它会排队等待commit语句通过?sql语句还没有应用吗 修改1: 所以,也许我第一次不清楚我想做什么

这可能是一个简单的问题

在我的代码中,我正在执行

user = em.find(User,pk);
user.setName("name");
em.flush();
使用调试器执行此flush()状态集后,我停止使用断点。现在,我使用我的SQLDeveloper工具检查是否在DB中进行了更改。我看不到DB中完成的更改

这对于flush命令意味着什么

  • 刷新生成的sql将被发送到DB,但在DB上它会排队等待commit语句通过?sql语句还没有应用吗
  • 修改1: 所以,也许我第一次不清楚我想做什么

    我在节点1上有一个集群设置:在事务1中,我正在更改一些参数,比如说用户实体的名称,并对它们执行flush(),以便访问DB。我还不能进行提交,因为在事务中还有很多其他操作需要进行

    与此并行,在事务1中的节点(机器)2上,我获取用户实体。现在在这个事务中,唯一的愿望是检查用户的最新名称。 这就是平行发生的事情,也是我需要做的事情。 有人能告诉我如何做到这一点,使分布式节点看到最新的变化

    Node 1                                       Node 2 
    try{                                      try {
        em.getTransaction.begin                 em.getTransaction.begin
        user = em.find(User,pk);
        System.out.println.(user.getName())
        /* this prints JERRY*/
        user.setName("TOM");
        em.flush();
        ...
        ...                                     user = em.find(User,pk);
                                                System.out.println.(user.getName()) 
                                                /*This should print TOM*/
    
        ...
        em.commit()                             //no commit in this transaction  
     }  catch (Exception e) {                    } finally {
    
    
       //rollback                                 }
    } finally {
    
    }
    

    您可能是对的,您的事务尚未提交,因此在保存它们的事务之外,更改不可见。您使用什么启动和停止事务?

    flush()不提交事务,只写入数据库。要查看另一个会话中的更改,您需要提交事务。

    了解事务隔离级别您可能希望使用read Uncommitted(),但我建议您不要这样做。我强烈建议您找出一些组织代码的替代方法,这样您就可以部分提交单个工作单元,而无需长时间运行阻塞事务。阅读未承诺可能是一个丑陋的轨道下去,除非你准备好的后果。嗨,请看修改解释我试图实现。谢谢