在我的例子中是直接调用Session.flush(),按Hibernate文档的说法,在某些查询执行时也会自动调用flush,这就有潜在的不安全。除非我指定sess.setFlushMode(FlushMode.COMMIT),每次transction commit时才flush,但这样Hibernate的API就没有必要存在flush()方法。Hibernate的文档: flush, occurs by default at the following points 1.before some query executions 2.from org.hibernate.Transaction.commit() 3.from Session.flush()
flush, occurs by default at the following points 1.before some query executions 2.from org.hibernate.Transaction.commit() 3.from Session.flush()
所有会造成数据不同步的情况,例如你所提到的,都应该避免。举个例子,数据库的2阶段提交肯定要保证都提交成功,或者都失败。不可能把成功一半的数据暴露给其他用户的。