- 浏览: 1501161 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
1、NEVER:已经废弃了,被MANUAL取代了
2 MANUAL:
如果FlushMode是MANUAL或NEVER,在操作过程中hibernate会将事务设置为readonly,所以在增加、删除或修改操作过程中会出现如下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove ''readOnly'' marker from transaction definition;
解决办法:配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;
3 AUTO
设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库
4 COMMIT
提交事务或者session.flush()时,刷新数据库;查询不刷新
5 ALWAYS:
每次进行查询、提交事务、session.flush()的时候都会刷数据库
ALWAYS和AUTO的区别:当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当 session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷,而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。
总结:若OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。然后把该sessionFactory绑定到TransactionSynchronizationManager,使request的整个过程都使用同一个session,在请求过后再解除该sessionFactory的绑定,最后closeSessionIfNecessary根据该session是否已和transaction绑定来决定是否关闭session。在这个过程中,若HibernateTemplate 发现自当前session有不是readOnly的transaction,就会获取到FlushMode.AUTO Session,使方法拥有写权限。
也即是,如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有insert,update,delete操作权限,如果没有transaction,并且没有另外人为地设flush model的话,则doFilter的整个过程都是Flush.NEVER。所以受transaction保护的方法有写权限,没受保护的则没有。
发表评论
-
自定义用户类(UserType)的使用
2011-08-04 10:46 1857学习hibernate有段时间了,最近复习这门技术时看到了自定 ... -
技巧:利于ThreadLocal模式管理Session
2011-08-02 10:31 1264在利用Hibernate开发DAO模块时,我们和Session ... -
Hibernate中的回调与拦截机制
2011-07-27 17:31 1460在某些情况下,我们需要对实体的CURD操作进行捕获并执行一些操 ... -
HibernateTemplate中HibernateCallback的事务
2011-07-04 14:41 1440目的:使用HibernateTemplate执行execute ... -
Hibernate的复杂用法HibernateCallback
2011-07-04 14:40 1336HibernateTemplate还提供一种更加灵活的方式来操 ... -
数据库持久层——浅谈hibernate中的Session
2011-07-01 22:49 1666大多数情况下,Session 管理的目标聚焦于通过合理的设 ... -
详解Hibernate Session
2011-07-01 22:42 1492这里介绍Hibernate Session,Ses ... -
HttpSession与Hibernate中Session的区别
2011-07-01 22:41 1290一、javax.servlet.http.HttpSess ... -
巧用SQLQuery中的addScalar
2011-06-02 17:16 5741当我们用HQL进行子查询的时候,如select * from ... -
hibernate中SQLQuery的addEntity();方法
2011-04-13 14:48 2888如果使用原生sql语句进行query查询时,hibernate ... -
Hibernate的clear(),flush(),evict()方法详解
2011-03-24 11:18 17701.Clear 方法 无论是Load 还是 G ... -
hibernate模糊查询-Restrictions.ilike & Expression.like
2011-03-11 10:32 16354Criteria criteria = session.c ... -
Hibernate分页查询小结
2011-03-10 11:14 1826通常使用的Hibernate通常是三种:hql查询,QBC查询 ... -
current_session_context_class
2011-03-07 15:31 1293此设置的作用如下: What does sessionFac ... -
Hibernate的拦截器和监听器
2010-12-14 15:06 1386核心提示:最近项目需要,用到了Hibernate的拦截器和 ... -
孙卫琴.精通Hibernate:Java对象持久化技术详解_触发器使缓存与数据库不一致
2010-12-14 08:46 1386p198 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_优化报表查询的性能
2010-12-13 17:51 1269p332 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_查询结果类型
2010-12-13 17:34 1303p329 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_投影查询
2010-12-13 17:31 1423p325 -
深入浅出hibernate_夏昕_hibernate别名完成ResultSet和实体的映射
2010-12-13 17:09 1354p199
相关推荐
2. **Hibernate中Java对象的状态**:在Hibernate中,对象有三种状态:瞬时态、持久态和游离态。瞬时态指的是未与 `Session` 关联的对象;持久态指的是已经与 `Session` 关联且被 `Session` 缓存管理的对象;游离态则...
- 使用批处理操作,通过`Session`的`flushMode`和` batchSize`设置优化性能。 通过以上步骤,你可以在NetBeans中高效地利用Hibernate进行数据操作。这个过程简化了数据库操作,使得开发者可以专注于业务逻辑,而...
4. 对于大数据量的操作,考虑使用批处理,如Session的flushMode和 batchSize属性。 总结,"Hibernate_demo"是一个生动的实例,展示了如何在实际项目中运用Hibernate5。通过分析这个项目,我们可以更好地理解和掌握...
12. **事务管理**:讲解Hibernate的事务API,包括Transaction接口和FlushMode,以及如何与其他事务管理机制(如JTA)集成。 13. **事件监听器**:学习如何使用Hibernate事件系统来实现定制的行为,如预加载、预更新...
例如,你可以创建一个名为`User`的类,包含`id`、`username`、`password`等属性,并使用`@Entity`注解标记为Hibernate实体。对于每个属性,使用`@Id`(主键)、`@GeneratedValue`(自增主键策略)、`@Column`(列名...
Hibernate 中 Criteria 的使用是 Hibernate 框架中的一种查询机制,对于研究 Hibernate 源码有一些作用。在查询方法设计上可以灵活地根据 Criteria 的特点来方便地进行查询条件的组装。 Criteria 是 Hibernate 中的...
2. **使用Detached状态**:Hibernate的对象有四种状态:Transient、Persistent、Detached和Removed。当对象被detach(分离)后,它的状态变为Detached,此时对它的修改不会触发数据库更新。在需要更新时,再将...
FlushMode和CacheMode则控制了Session何时将数据同步到数据库。 5. **查询语言(HQL)**:Hibernate Query Language是面向对象的查询语言,类似于SQL,但操作的是对象和集合。它可以进行复杂的查询,如JOIN、GROUP ...
因为`Open Session In View`默认采用`FlushMode.NEVER`,这意味着Hibernate不会自动刷新session来同步数据库的变化。为了避免这个问题,可以采取以下几种解决办法: 1. **更改Flush Mode**:将`FlushMode`设置为`...
在Java世界中,Hibernate 提供了一种在对象模型和关系数据库之间进行转换的机制,使得开发人员可以使用面向对象的方式来处理数据库操作,而无需直接编写SQL语句。 ### 1. Hibernate核心概念 - **实体(Entity)**:...
2. **检查实体类**:确保每个属性都有正确的 getter 和 setter 方法。 **另一个例子**: ``` org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined ...
- 查询操作:`find()`或`iterate()`时,如果对象属性有变动,会先清理缓存以更新查询结果。 - 显式调用`flush()`:手动触发缓存清理,执行计划的SQL语句。 5. **Session接口的方法**: - `save()`: 将临时对象...
一级缓存(First Level Cache)是Hibernate内置的,每个Session都有一个独立的一级缓存。当我们在Session中进行对象的CRUD操作时,这些对象会被存储在一级缓存中。一级缓存是事务级别的,即在一个事务中,所有对同一...
- **FlushMode**: 控制Session何时执行flush操作。 #### 五、级联操作 - **级联保存**(cascade save): 在保存一个对象时,同时保存其关联对象。 - **级联删除**(cascade delete): 删除一个对象时,同时删除其关联...
- 使用Session的flushMode设置控制何时将脏数据同步到数据库。 8. 链接其他技术: - Spring框架集成:Spring提供了对Hibernate的支持,简化了配置和事务管理。 - JPA集成:Hibernate作为JPA的实现,可以使用JPA...
配置中包含了`sessionFactoryBeanName`、`singleSession`和`flushMode`等参数,用于指定SessionFactory的bean名称、是否使用单个Session以及flush模式。 在`web.xml`中,Struts2的配置通过`...
例如,`Session.flushMode()`和`Session.setBatchSize()`方法。 2. 延迟加载:Hibernate的懒加载机制可以降低内存消耗,但过多的延迟加载可能导致大量小查询,增加数据库压力。合理设计实体关系,适时使用立即加载...
- **本地事务**:由Hibernate管理,适用于单个`Session`。 - **全局事务**:通常由应用服务器管理,支持多个资源的事务协调。 #### 四、高级特性 1. **懒加载** - 实现按需加载,提高应用性能,减少内存占用。 ...
Open Session In View是一种在Spring框架中常用的技术,用于简化Hibernate中的懒加载(lazy loading)机制。通过保持Hibernate Session在整个请求周期内处于打开状态,可以避免在视图层因为Session关闭而导致的`...