0

这是一个简单的问题可能是

在我的代码中,我正在做

user = em.find(User,pk);
user.setName("name");
em.flush();

在使用调试器的这个 flush() statemenet 之后,我停止使用断点。我现在使用我的 sql 开发人员工具检查是否在 DB 中进行了更改。我没有看到数据库中完成的更改。

这对刷新命令意味着什么。

  1. 刷新生成的 sql 将被发送到数据库,但然后在数据库上排队等待提交语句通过?sql语句还没有应用?

修改1: 所以我第一次可能不清楚我要做什么

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

与事务 1 中的此 On Node(Machine) 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 {

}
4

2 回答 2

0

您可能是正确的,您的事务尚未提交,因此更改在持久化它们的事务之外不可见。您使用什么来启动和停止交易?

于 2012-07-09T01:00:16.253 回答
0

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

于 2012-07-09T13:01:08.797 回答