2013-11-28 62 views
0

我在行动阅读休眠和整个以下的Hibernate持久实例

持久化实例来参与交易,其状态是在交易结束时同步 与数据库。当事务提交时,通过执行INSERT,UPDATE和DELETE语句将保存在内存中的 状态传播到数据库。此过程也可能发生在其他 次。例如,休眠可能会在执行 查询之前与数据库同步。这可以确保查询知道在交易过程中早些时候做出的更改 。

我无法理解以粗体显示的行。这种情况何时会出现?如何同步发生。

+0

搜索hibenrnate锁定和读取http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch05.html – Deepak

回答

1

同步实际上保存了以前对数据库所做的更改。要做到这一点,你可以使用flush()方法。

通常你会在另一个sql查询之前执行此操作,以确保已做出更改。

0

是的,有两个操作涉及:更新数据库以反映对持久对象所做的更改;这个操作被称为flush。 Hibernate可以在事务中的任何时候调用它,然后提交本身,它需要一个flush来确保数据库是最新的,并且在底层数据库中提供一个终止事务的COMMIT。

0

FlushMode.AUTO 在数据库事务结束时将会话状态刷新到数据库的步骤为 ,这是为了使更改持久化并且是常见的情况。休眠 不会在每个查询之前刷新。但是,如果在内存中保存了 会影响查询结果的更改,则Hibernate默认会首先进行同步。

FlushMode.COMMIT 指定在执行查询 之前不会刷新会话(只会在数据库事务结束时刷新会话)。是

FlushMode.NEVER允许您指定仅对flush()结果 进行显式调用,以使会话状态与数据库同步。

参考:春季在行动