hibernate的flush

来源:互联网 发布:windows系统正版验证 编辑:程序博客网 时间:2024/05/29 17:38

1.若是hibernate的hbm.xml配置的<generator class="native"></generator>,

则在一个Transaction tx=session.beginTransaction();里面,

session.save(对象)时候,只是会产生select hibernate_sequence.nextval from dual,这样并没有产生insert语句,

在后面加了session.flush(),才产生insert语句,但是此时未提交事务,所以用另个session查看的时候,并不能看见插入的数据,当tx.commit();时候,将数据真正插入数据库里,不能回滚。

2.如果上面的例子没有加session.flush(),这样的场景:在一个Transaction tx=session.beginTransaction();里面,-->session.save(对象)-->tx.commit();这样也能在数据库里插入数据,因为tx.commit();时候里面会用session.flush()。

3.若是一个事务里没有用session.flush()和tx.commit();只是session.close()。那么在数据库里不会有数据。因为没有产生insert语句。