- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我看到一些帖子问几乎相同的事情,但要点有点不同。
这是一个经典案例:我正在保存/更新一个实体,并且在 中相同的 session ,我正在尝试使用 FlushMode = Auto 从数据库中获取它们(使用标准/查找/枚举/等)。事情是: NHibernate 在查询之前不会刷新更新 ,所以我从数据库中得到不一致的数据。
“足够公平”,有些人会说,正如文档所述:
This process, flush, occurs by default at the following points:
- from some invocations of Find() or Enumerable()
- from NHibernate.ITransaction.Commit()
- from ISession.Flush()
Except when you explicity Flush(), there are absolutely no guarantees about when the Session executes the ADO.NET calls, only the order in which they are executed. However, NHibernate does guarantee that the ISession.Find(..) methods will never return stale data; nor will they return the wrong data.
public void FlushModeAutoTest()
{
ISession session = _sessionFactory.OpenSession();
session.FlushMode = FlushMode.Auto;
MappedEntity entity = new MappedEntity() { Name = "Entity", Value = 20 };
session.Save(entity);
entity.Value = 30;
session.SaveOrUpdate(entity);
// RETURNS ONE ENTITY, WHEN SHOULD RETURN ZERO
var list = session.CreateQuery("from MappedEntity where Value = 20").List<MappedEntity>();
session.Flush();
session.Close();
}
最佳答案
我对 NHibernate 源代码不是很熟悉,但是 2.1.2.GA 版本中 ISession 实现的这个方法可能会回答这个问题:
/// <summary>
/// detect in-memory changes, determine if the changes are to tables
/// named in the query and, if so, complete execution the flush
/// </summary>
/// <param name="querySpaces"></param>
/// <returns></returns>
private bool AutoFlushIfRequired(ISet<string> querySpaces)
{
using (new SessionIdLoggingContext(SessionId))
{
CheckAndUpdateSessionStatus();
if (!TransactionInProgress)
{
// do not auto-flush while outside a transaction
return false;
}
AutoFlushEvent autoFlushEvent = new AutoFlushEvent(querySpaces, this);
IAutoFlushEventListener[] autoFlushEventListener = listeners.AutoFlushEventListeners;
for (int i = 0; i < autoFlushEventListener.Length; i++)
{
autoFlushEventListener[i].OnAutoFlush(autoFlushEvent);
}
return autoFlushEvent.FlushRequired;
}
}
关于NHibernate FlushMode 在查找前自动不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295169/
已经通过 FlushMode 的 hibernate api 规范,但没有得到确切的区别。所以请帮忙。 最佳答案 如果在触发任何查询之前刷新模式为“AUTO”,则 hibernate 将检查是否有任何
好吧,我看到一些帖子问几乎相同的事情,但要点有点不同。 这是一个经典案例:我正在保存/更新一个实体,并且在 中相同的 session ,我正在尝试使用 FlushMode = Auto 从数据库中获取
在 Hibernate 中,我想知道当 flushMode 为 AUTO 时哪些条件会触发刷新?它可能很复杂(或“神奇”),但基本条件是什么? 谢谢 最佳答案 当 flush mode是 FlushM
您能给我一些在 Hibernate session 中使用 FlushMode.ALWAYS 的实际示例吗? 谢谢 最佳答案 这几乎总是不必要的。如果在 session 中进行的修改在刷新到数据库时导
根据 Session.setFlushMode(FlushMode)我们可以将 FlushMode 设置为 session 。现在我正在尝试测试Flushmode.COMMIT如何模式适用于一个小例子
我真的是 Spring 的新手我正在使用 JSF+Hibernate+Spring 开发一个简单的 JEE 应用程序我在尝试更新 DAO 上的值时遇到了一些问题我确定问题与 Spring 配置 xml
我已经将 NHibernate session 的 FlushMode 属性设置为 FlushMode.Never,但是当我调用 session.Save(User) 时,无论如何都会对数据库进行调用
我花了一些时间搜索如何配置 NHibernate 的 FlushMode,以便它只能保存我明确称为 Save/Update/Delete 的对象,但我发现我不能这样做。取而代之的是,当我使用 NHib
Grails 1.3.7 我们有一个合并2个用户的服务方法。由于数据量大,因此有很多内容,因此需要进行大量的读取,更新和写入。服务中有transactional = true。我了解Grails的默认
这个问题已经有答案了: EntityManger flushmode in JDBC (1 个回答) 已关闭 9 年前。 entityManager.setFlushMode(FlushModeTyp
我已将 spring security 插件与我的 grails 应用程序集成,该应用程序将 hibernate 作为 ORM 工具... 使用 Spring Security 插件,我的应用程序一切
帮助设置 hibernate 的刷新属性。 我遇到了错误。 在只读模式 (FlushMode.MANUAL) 下不允许写入操作:将您的 Session 转换为 FlushMode.COMMIT/AUT
我正在努力提高异步事务方法的性能。 在这个任务中,我必须从一个表中读取近 7500 条记录,对其进行详细说明,然后在另一个表中插入/更新相应的行。 我在 hibernate 中使用 spring da
所以...已经说过了: 如何在 C# 中将 FlushMode 更改为 Commit? 我的意思是,在 Fluent NHibernate 中,FlushMode 默认设置为 Auto。 所以...要
我的应用程序使用 FlushMode.AUTO 。对于特定的服务方法调用,我想将 Hibernate Session.FlushMode 更改为 FlushMode.COMMIT 并在方法完成时恢复为
我们目前正在将一个用 Spring/Hibernate 编写的遗留应用程序迁移到 Spring Boot(为了减少冗长的配置和其他好处)。 因为 Spring Boot 遵守 JPA,我们必须“迁移”
我想在没有 FlushMode.ALWAYS 的情况下运行一个单一的方法。 所以我需要 setFlushMode(FlushMode.COMMIT) 但我不知道该怎么做,我开始认为使用 spring
我读到是否调用 session.flush()提交与否取决于 FlushMode已设定。不过,我不知道是哪个FlushMode做这个。我希望 session 被刷新并提交。我应该使用哪种 FlushM
我有下一个代码: Color color = new Color(null,"B12",null,1); Session session=sessionFactory.openSess
我是 spring 的初学者,在我基于控制台的项目中,我将 spring 与 hibernate 结合使用。我被以下错误困扰了大约一天。 Exception in thread "main" org.
我是一名优秀的程序员,十分优秀!