Java FlushMode.COMMIT的工作原理
根据,我们可以将FlushMode设置为会话。现在我试着用一个小例子来测试这个模式是如何工作的 我创建了一个名为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
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()
,您将覆盖该行为