hibernate flushmode

这里面的清理缓存可以理解为hibernate自动执行了一次 session.flush();

选择什么样的flush mode就是采取对hibernate session采取什么样的数据刷新的策略。

Session.setFlushMode()用于设定清理缓存的时间点。

对比一下几种flush mode:

FlushMode.AUTO:

调用Session的查询方法时,清理缓存,注意:这条规则必须保证显式开启的事务中,对于outside a transaction

调用Session.commit()时,清理缓存

调用Session.flush()时,清理缓存

FlushMode.COMMIT:

调用Session的查询方法时,不清理缓存

调用Session.commit()时,清理缓存

调用Session.flush()时,清理缓存

FlushMode.NEVER(MANUAL):

调用Session的查询方法时,不清理缓存

调用Session.commit()时,不清理缓存

调用Session.flush()时,清理缓存

FlushMode.ALWAYS:测试未发现和auto有什么区别。

调用Session的查询方法时,清理缓存,注意:这条规则必须保证显式开启的事务中,对于outside a transaction

调用Session.commit()时,清理缓存

调用Session.flush()时,清理缓存

=================

三种情况分别在以下时机同步数据库

session.flushmode=manual

1.只有手动调用flush()

session.flushmode=commit

1.手动调用flush()

2.commit()时候

session.flushmode=auto

1.手动调用flush()

2.commit()时候

3.查询前 (经过测试(oracle驱动),必须在事务内,不确定是否全部情形)

==================

对比一下,请注意FlushMode.NEVER

如果在调用Session的查询方法之前,不清理缓存,那么就会引入脏数据

所以会有那一步

session.flush(); // who know‘s what been done till now

在FlushMode.NEVER之前,将缓存清理,保证数据正确。

在文中最后一段程序中:

将FlushMode.NEVER夹在两个session.flush()之间,就保证在不清理缓存的情况,数据的一致性。


下面的文章值得一看。

《了解Hibernate的FlushMode.NEVER模式》

http://www.51cto.com/specbook/229/34023.htm

http://www2.matrix.org.cn/resource/article/2006-10-08/Hibernate+FlushMode+NEVER_312bca85-5699-11db-91a0-d98dff0aec60.html

时间: 2024-11-10 06:22:31

hibernate flushmode的相关文章

Hibernate session FlushMode

Hibernate session FlushMode有五种属性: 1.NEVEL:已经废弃了,被MANUAL取代了 2 MANUAL: 如果FlushMode是MANUAL或NEVEL,在操作过程中hibernate会将事务设置为readonly,所以在增加.删除或修改操作过程中会出现如下错误 org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-

Hibernate学习-在线书城后台管理系统的设计

写在前面:小编经历了昨天一晚上加今天一整天的“不吃不喝(夸张点…总之就是把时间全分享给TA了)”终于把程序的问题全部解决了,小编现在的心情十分的开森,开森,开森,Happy,话不多说,直接进入正题: ------------------------------------------------------------我是一条帅气的分割线--------------------------------------------------- 在线书城后台管理设计: ----------------

hibernate使用Query进行查询

本文主要探讨hibernate的简单查询,主要是使用Query进行的查询. 1.首先看下annotation的API中关于查询的描述 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 使用注解还可以映射EJBQL/HQL查询. @NamedQuery 和@NamedQueries是可使用在类和包上的注解. 但是它们的定义在session factory/entity manager factory范围中是都可见的. 命名式查询通过它的名字和实际的查询字符串来定义. javax.per

Spring与Hibernate整合之通用Dao的实现

在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的Bean对象从而操作数据库的,下面就简要介绍一下实现通用的数据库操作对象Dao类: 1.最基本的数据库操作接口BaseDao<T>: 1 import java.io.Serializable; 2 import java.util.List; 3 4 public interface BaseDao<T> { 5 6 Serializab

在MyEclipse配置自己安装的Tomcat(2014.08.18)

今天因为要在tomcat下运行一个java项目,第一次嘛,遇到了不少问题,总结分享一下: 第一次,我直接将 MyEclipse 生成的项目放到 tomcat 安装目录的 webapps 目录下,运行出现404,无法访问. 然后想了想,发现这是个错误的做法.应该先通过 MyEclipse 将项目部署到 Tomcat 下: 然后, MyEclipse 自带了 tomcat,我要配置自己安装的 TomCat : (请看参考资料:http://jingyan.baidu.com/article/4853

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

---恢复内容开始--- 1 /* 2 * Copyright 2002-2014 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of t

org.springframework.orm.hibernate4.support.OpenSessionInterceptor

/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://

grails通过findBy或findBy查找的结果集进行排序

原文:http://grails.org/doc/2.3.x/ref/Domain%20Classes/list.html list Purpose Lists instances of the domain class. Examples // list everything def results = Book.list() // list 10 results def results = Book.list(max: 10) // list 10 results, offset by 10

用 OpenSessionInViewInterceptor 的思路解决 Spring框架中的Hib

众所周知, 为了解决 Hibernate Lazy 问题, Spring 中引入了 OpenSessionInViewInterceptor, 这样虽然解决了页面上的 Lazy Load 问题,却增加了各层之间的偶合性, 如果一个 Lazy 的 Collection 在页面上可以被正确的 load, 但是如果请求不是来自于 HttpServletRequest (比如在 TestCase 或 Service 中希望获取 lazy 的属性), 一般会导致两种错误: 代码 [java] view p