Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
Java FlushMode.COMMIT的工作原理_Java_Hibernate - Fatal编程技术网

Java FlushMode.COMMIT的工作原理

Java FlushMode.COMMIT的工作原理,java,hibernate,Java,Hibernate,根据,我们可以将FlushMode设置为会话。现在我试着用一个小例子来测试这个模式是如何工作的 我创建了一个名为Cat的实体,它只有两个属性id和name。下面是我正在测试的代码: Session session = getSession(); session.setFlushMode(FlushMode.COMMIT); Transaction tx = session.beginTransaction(); Cat cat = (Cat) session.ge

根据,我们可以将FlushMode设置为会话。现在我试着用一个小例子来测试这个模式是如何工作的

我创建了一个名为
Cat
的实体,它只有两个属性
id
name
。下面是我正在测试的代码:

    Session session = getSession();
    session.setFlushMode(FlushMode.COMMIT);
    Transaction tx = session.beginTransaction();
    Cat cat = (Cat) session.get(Cat.class, 1);
    cat.setName(name);
    session.flush();
    //tx.commit();
    session.close();
从日志中我可以看到,当执行行
session.flush()
时,hibernate会向数据库发出JDBC更新调用,如下所示:

Hibernate: update Cat set name=? where id=?

当我将FlushMode设置为COMMIT时,我希望只有在我说
tx.COMMIT()
时才会执行
update
查询,但是刷新是在
session.flush()执行的。有人能解释一下为什么会这样吗?

请注意
会话#flush()
的Javadoc

强制此会话刷新。必须在一个单位的末尾调用 在提交事务和关闭会话之前进行工作 (根据刷新模式,
Transaction.commit()
调用此方法)

或用于
FlushMode#MANUAL

只有在显式启动
Session.flush()
时才会刷新
会话
由应用程序调用。此模式对于只读非常有效
交易

设置
FlushMode
只需定义
flush()
将自动发生的时间(除了
手动
)。如果您自己手动调用
flush()
,您将覆盖该行为