gpt4 book ai didi

hibernate - 为什么 Hibernate 只在事务内自动刷新?

转载 作者:行者123 更新时间:2023-12-04 20:55:30 25 4
gpt4 key购买 nike

这种行为背后的原因是什么?

如果出于某种原因我在事务之外执行了两个合适的操作(不推荐,我知道!)并且我已将 Hibernate 配置为自动刷新,如果第二个操作应该触发自动刷新,我希望它自动刷新-flush (如 listiterateexecuteUpdate )。

如果不是对 autoFlushIfRequried 的第二行进行显式检查,这正是会发生的情况。方法:

protected boolean autoFlushIfRequired(Set querySpaces) throws HibernateException {
errorIfClosed();
if ( ! isTransactionInProgress() ) {
// do not auto-flush while outside a transaction
return false;
}
AutoFlushEvent event = new AutoFlushEvent(querySpaces, this);
AutoFlushEventListener[] autoFlushEventListener = listeners.getAutoFlushEventListeners();
for ( int i = 0; i < autoFlushEventListener.length; i++ ) {
autoFlushEventListener[i].onAutoFlush(event);
}
return event.isFlushRequired();
}

更新 : 谢谢 axtavt用于查找导致此更改的 Hibernate 问题(在 3.2 中): FlushMode.AUTO -> COMMIT when outside a transaction .

一个相关问题仍然未解决: delay IDENTITY insertions in the case of FlushMode.MANUAL/NEVER ,但是这两个讨论都没有提供“在事务之外操作时,FlushMode.AUTO 是一件坏事”的理由。

最佳答案

因为文档为FlushMode

The Session is sometimes flushed before query execution in order to ensure that queries never return stale state. This is the default flush mode.



所以,汽车并不意味着你认为它意味着什么。可以说,该名称选择不当,但这并不意味着每次 session 操作后都会进行刷新。因此它与 JDBC 的自动提交不同,后者在 JDBC 语句之后进行提交。

关于hibernate - 为什么 Hibernate 只在事务内自动刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com