当我在外部刷新内容时,它不会将其保存在数据库中。例如,下面的代码不会将其保存在DB中:
public class save {
public static void main(String[] args) {
emp a=new emp("klds","asda",12231);
emp b=new emp("asd","asd",213);
emp c=new emp("ERTE", "retre", 1323434);
Session session=myfactory.getSession();
session.save(a);
session.save(b);
session.save(c);
session.flush();
session.clear();
}
但是当我使用交易时,它会将其保存在数据库中。为什么这样做?
答案 0 :(得分:2)
flush
只有synchronization
的数据库,然后您需要commit
才能看到更改。
如果您只是commit
。它会自动flushes
,您也可以从其他会话中看到您的更改。
当我们致电session.flush()
时,我们的陈述将execute
在数据库中,但不会是committed
。
但是如果我们不在会话对象上调用flush()
方法,并且如果我们直接调用commit
方法.... commit
将在内部调用flush
(做的工作执行数据库上的语句)然后committing
。
所以commit=flush+commit
因此,当我们在Session对象上调用方法flush()
时,它不会commit
,而是命中数据库并executes
查询和rollback
相同的
所以要提交,我们必须在commit()
对象
Transaction
答案 1 :(得分:0)
尝试将会话的FlushMode
更改为MANUAL
:
session.setFlushMode(FlushMode.MANUAL)