1、只读需要加事务么?加事务会不会影响速度了?
锁和不锁区别, 速度上没有影响,建议加事务。
2、hibernate的缓存
一级缓存——Session
二级缓存——Cache Concurrency Strategy、 Query Cache、 Cache Provide
一级缓存
1、一级缓存就是Session(Map). 一个session生命长度与事务相对应,他是必要的,不能被关闭,并且他能保证一个事务中id号的(唯一),Map的key就是存放对象的主关键字。
2、无论进行对象的save(),update(), saveOrUpdate(),还是load(), find(), list(), iterate(),filter(),这些对象都会被放进缓存中(key, value),一旦flush方法调用,这些对象的状态将与数据库同步。
3、当你load100000个对象,则可能发生"OutOfMemoryException"异常。我们怎么能够使用Hibernate处理这种大量对象批量处理操作了?我们的观点是ORM不适合处理update、delete批量处理。如果你想进行这类操作,有一种更好的手段:使用数据库的存储过程 或者 直接使用SLQ UPDATE 和 Delete语句。如果你非得要用Hibernate进行大批量操作,一旦操作完成立马执行evict操作,释放缓存。(不要把所有的数据都放入缓存)
4、完成所有对象的evict操作,我们调用Session.clear()方法,一般很少用,但是用的时候,作用很大的。
-=-=-=-=-=-=-=-=-=-=-=-=DML语句的问题-=-=-=-=-=-=-=-=-=-=-=-=
对于更新,删除DML语句,尽量别使用hql,容易引起不同步
举例:
User user = userService.getUserById(userId);//通过get的方式获取,此时username=“张三”
这时候缓存中有user对象了
接着:
String hql = "update User u set u.username=李四",然后是有excuteUpdate方式来更新
再接着:
User user = userService.getUserById(userId);?你猜此时的username=? 张三
测试发现,最后一句没有发出sql语句,明显是从缓存中获取的,那就是之前的那个对象
我们知道,如果使用userService.save(user);,user前后的内容跟数据库会保持同步,
但是hql语句执行更新了数据库,并没有让持久类的对象user与数据库中保持同步。
问题可能:如果我这边执行hql一更新,你缓存中的对象就要同步的话,会加大hibernate的压力,2w条数据,hiberante缓存就要更新两万个对象,不好。。
对于save,就没有这个问题。。。。。
分享到:
相关推荐
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
5. **java_hibernate_day05.pdf** - 最后一天的学习可能涵盖了高级主题,如关联映射(一对一、一对多、多对多)、懒加载、缓存机制(一级缓存和二级缓存)以及事务管理。这些内容帮助开发者更好地理解和优化应用程序...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),...查询的优化,一级缓存,二级缓存,批量查询,注解方式
- 缓存机制:介绍Hibernate的一级缓存(Session级别)和二级缓存(SessionFactory级别),以及如何配置和利用缓存提高性能。 - 事务管理:讨论Hibernate如何支持事务,以及如何在代码中控制事务的提交和回滚。 - ...
同时,缓存机制,如一级缓存(First Level Cache)和二级缓存(Second Level Cache),也将被详细讨论,它们对于提高应用程序性能至关重要。 最后,笔记可能会涉及Hibernate的其他特性,如事件监听器、拦截器、查询...
### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...
一级缓存是Session级别的,自动管理对象的状态;二级缓存则可跨Session共享,通常由第三方插件如Ehcache提供支持。正确配置和使用缓存能有效减少数据库访问。 八、性能优化 学习Hibernate3.3,需要关注性能优化技巧...
- **缓存机制**: Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),提高性能。 - **懒加载和立即加载**: 控制关联对象的加载时机,优化内存使用。 - **多态性支持**: 可以直接根据父类...
- 第一级缓存:Session级别的缓存,每个Session都有自己的缓存,存储了最近访问过的对象。 - 第二级缓存:SessionFactory级别的缓存,可以跨Session共享,常使用第三方缓存提供商如Ehcache。 - 查询缓存:存储...
8. **缓存机制**:Hibernate提供了一级缓存和二级缓存,能有效减少数据库访问,提高应用性能。 9. **实体生命周期**:Hibernate定义了持久化对象的生命周期状态,包括临时态、瞬时态、持久态和脱管态,理解这些状态...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...
5. 使用二级缓存,提高应用性能。 6. 谨慎使用级联操作,防止数据冗余或异常。 【八、Hibernate Tool】 Hibernate Tool是一组工具,包括了反向工程(Reverse Engineering)可以自动生成Java实体类和映射文件,以及...
一级缓存是默认开启的,它的生命周期与`Session`相同,存储的对象在内存中,减少了与数据库的交互。而二级缓存则是在`SessionFactory`级别,虽然现在更多地被Redis等分布式缓存替代,但在某些场景下仍有一定价值。 ...
《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...
7. **性能优化**:Hibernate的性能优化主要包括缓存机制(第一级缓存、第二级缓存)、批处理、延迟加载等策略,通过合理设置和使用,可以显著提高应用程序的运行效率。 8. **Annotation与XML配置**:Hibernate支持...
**Hibernate学习笔记** Hibernate是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。本笔记将深入探讨Hibernate的核心概念、配置、实体管理、查询语言以及最佳实践...
Hibernate 内置了二级缓存,包括一级缓存(Session 缓存)和二级缓存(SessionFactory 缓存)。一级缓存是每个 Session 独有的,而二级缓存是所有 Session 共享的,可进一步提高数据访问速度。 11. **实体关系映射...