Hibernate事务会自动更新缓存。其意思是指,缓存中查出来的所有对象(一个事务内),都判断对象是否被更新。如果更新了,Hibernate会自动更新数据库。
事务开始.
假设我现在查出所有用户,并对某些用户进行了操作,但这些操作我不想更新数据库,也就是我只是操作缓存,来计算他们的奖金。
计算完成奖金后,该方法结束。
事务结束.
以上操作的结果是,数据库记录被更新了。因为在一个事务里,但其实我只是想试操作用户的数据而不想更新。但为什么更新了,这就要问Hibernate了,对是这家伙干的好事,Hibernate发现查出了所有用户的List,并把所有用户都放在Hibernate缓存中了。如果在一个事务中,你对该List里的用户操作了,并且他发现了你的操作,他会自动更新数据库。
但我现在不想让他更新数据库,并且我的计算奖金算法看上去没有必要用事务。是的他根本没有必要用试务,因为他不更新,不保存,他只是算奖金。
所以解决这个问题的方法就是不要用管理器中对该Service进行管理.
现在想想为什么我们不用事务,Hibernate就不自动更新数据库了?原因很简单,因为当我们查出所有用户之后Hibernate还做了件事,Session.close();
当他调用了Session.close()方法时,我们查询的List就变成了游离对象了,这时该List已不在Hibernate缓存中,这时你可以方便的设置和更新了,只不手动设用Update
Hibernate是不会帮你更新的^_^。当然也可以使用evict方法把对象变为游离。
呵呵,可是在一个事务中,就算你把他变成游离,Hibernate还是会自动更新的。(我试过)不过估计Hibernate应该有设置在一个事务内不自动更新的参数吧,当然也有其他办法,例如:
TblArchivesFieldSet fieldSet = new TblArchivesFieldSet();
org.apache.commons.beanutils.BeanUtils.copyProperties(fieldSet, fieldSet2);
重新建个对象,拷贝。
相关推荐
本篇文档将深入探讨如何解决Hibernate自动更新实体类的问题,帮助开发者更好地理解和控制Hibernate的数据持久化行为。 首先,我们需要理解Hibernate的自动更新机制。Hibernate通过`Session`对象来管理对象的状态,...
在本教程中,我们将探讨如何利用Hibernate的注解功能,通过实体类自动生成数据库中的表。这极大地简化了数据库建模过程,同时也减少了手动编写SQL语句的工作量。 首先,我们需要理解Hibernate的核心概念。ORM框架如...
1. **显式控制更新**:如果你不想让Hibernate自动更新实体,可以在修改完对象后,调用`Session.evict(entity)`方法将实体从Session缓存中移除,这样就不会触发自动更新。或者,如果不希望整个实体被更新,可以只更新...
7. **安全性与最佳实践**:虽然使用Hibernate自动生成数据库文件可以快速启动项目,但要注意这可能会导致数据丢失,因为`create`操作会删除已有数据。在生产环境中,通常推荐使用`update`或`validate`,并且在实际...
标题中的“Spring+Hibernate 自动映射”是指在Java Web开发中,利用Spring框架与Hibernate ORM工具进行数据层的整合,实现对象关系映射(ORM)的自动化处理。这一技术结合了Spring的强大依赖注入(DI)和事务管理...
"Hibernate自动生成持久化类和映射文件"这个话题主要涉及如何利用myEclipse这款集成开发环境的反向工程功能,快速地根据数据库中的表结构生成对应的Hibernate配置文件、映射文件以及持久化类。下面将详细介绍这一...
本篇将详细讲解如何在Java项目中结合SpringBoot和Hibernate进行双数据源配置,以满足对MySQL数据库的高效管理。 首先,我们要明白什么是双数据源配置。双数据源配置是指在一个应用中同时管理两个或更多的数据源,每...
在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,它们都是Java领域中广泛使用的ORM(对象关系映射)工具。 **Hibernate** 是一个强大的ORM框架,它允许开发者通过Java对象来操作数据库,而无需...
- 如果你使用NetBeans的Hibernate插件,可以自动生成`hbm.xml`映射文件。这可以通过右键点击项目,选择“Hibernate”->“Generate Hibernate Mapping Files”完成。 5. **数据操作** - **Session工厂...
Hibernate自动生成的DAO类通常会包含CRUD(创建、读取、更新、删除)的基本方法,如save()、get()、update()和delete()。这些方法内部调用了Hibernate的Session接口进行实际的数据操作。 4. **代码生成工具**:如...
而“Hibernate代码自动生成”则是指利用Hibernate的工具或者第三方库,自动生成与数据库表对应的Java实体类、DAO(数据访问对象)层、Service层以及相关的SQL语句,从而减少手动编写这些重复性代码的工作量,提高...
例如,要获取一个数据字典项,可以先打开Session,然后使用`get()`或`load()`方法,传入实体类的ID,Hibernate会自动执行SQL查询并返回相应的对象。若需插入或更新数据字典,可以先创建实体对象,设置属性值,然后...
本篇文章将详细讲解如何在MyEclipse环境下使用Hibernate连接数据库并自动生成配置文件。 首先,我们需要创建一个Web工程。在MyEclipse中,可以通过菜单栏选择“File” -> “New” -> “Dynamic Web Project”,为...
标题"Hibernate自动创建表结构示例--Oracle"表明我们将使用Hibernate在Oracle数据库中自动生成表结构,这是通过Hibernate的`hibernate.hbm2ddl.auto`配置属性实现的。这个属性可以设置为"create"、"update"、...
在这里,`getHibernateTemplate()`方法会自动获取当前配置的数据源对应的SessionFactory。如果需要切换数据源,可以通过设置`HibernateDaoSupport.setSessionFactory()`方法来实现。 为了在业务逻辑中切换数据源,...
- **Session**: Hibernate的主要工作接口,负责执行CRUD操作(创建、读取、更新、删除)。每个数据库事务都应在一个Session实例下完成。 - **Transaction**: 用于管理事务,确保数据一致性。 - **持久化状态**: ...
它还支持自动建表,这意味着在不同环境中部署应用程序时,无需预先创建数据库表,因为Hibernate可以根据配置自动创建。此外,Hibernate提供了强大的 Criteria API 和 HQL(Hibernate Query Language),使得查询更加...
总结来说,“Hibernate 映射文件自动生成”是提升Java ORM开发效率的重要手段,通过理解和掌握这个功能,开发者可以更加专注于业务逻辑,而非繁琐的底层数据结构配置。而“hibernate映射文件自动生成.doc”文档则...
5. **代码编写**:在业务代码中,我们不再直接依赖特定的数据源,而是通过Spring的AOP代理和自动注入,使得每次数据访问操作都会根据路由规则选择合适的数据源。 6. **Maven工程结构**:在“spring-multi-...