Hibernate采用的是write-behind的策略。MySQL的MyISAM类型,是不支持事务的,InnoDB类型支持事务。
现在有如下方法,假设表类型为MyIASM。
@Transaction
public void someMethod(User user) {
user.setAge(28);
update(user);
flush();
xxxDao.updateCategory(user.getCategory());
throw new RuntimeException();
}
现在,执行这个方法,会发生什么事情呢?可以发现,用户被更新了,但是,xxxDao执行的更新被回滚了。
天哪,太可怕了!是这样的,flush()会导致Hibernate将session中的内容同步到数据库,但是此时还是可以回滚的,前提是数据库支持事务。否则就一定会被同步到数据库,但是下面那条语句,因为抛出了异常,实际上session内缓存的内容是没有同步到数据库的。
将表类型修改为InnoDB后,问题解决,可以正确回滚。所以,平常写程序的过程中,尤为注意,要慎用flush(),且一定要谨慎选择MySQL的表类型,重要数据的表,一定要采用InnoDB类型,确保事务可以正确执行。
另外,不仅是flush()会立即将session的内容同步到数据库,自增主键的表,当执行insert的时候,也一样会立即写入数据,因为持久化对象必须拥有一个主键,加入您采用了MyIASM,且这个方法有事务,后面还抛出了异常的话。那个之前的保存是不会再回滚了,已经写入到数据库了。
分享到:
相关推荐
在与Spring和Hibernate整合时,需要正确配置MySQL的JDBC驱动(通常为`mysql-connector-java`),以便Spring的JdbcTemplate或Hibernate可以与数据库进行通信。注意,不同版本的MySQL可能需要对应版本的JDBC驱动,确保...
在IT行业中,Spring、Hibernate和Mysql是三个非常重要的开源框架和数据库系统,它们共同构成了企业级应用开发的基础。本文将详细阐述如何使用这三个技术来搭建一个简单的后端系统。 首先,Spring是一个全面的Java...
这是本人上课过程中为学生讲解hibernate、spring和mysql开发简单项目的截图汇集,大家需要先自己完成数据库以及JDBC数据源的配置,之后按照该截图的顺序就能完成一个最简单的支持数据库事务处理的SH系统,(如果使用...
【纯净的Spring+Hibernate+MySQL】项目是一个典型的Java Web应用示例,它将Spring MVC、Hibernate ORM框架与MySQL数据库相结合,以实现用户登录、注册等基础功能。在本项目中,Spring MVC作为控制层,负责处理HTTP...
在Java Web开发领域,Spring、Hibernate和MySQL是三个非常关键的技术组件。Spring作为一个全面的框架,提供了一种轻量级的控制反转(IoC)和面向切面编程(AOP)的解决方案;Hibernate则是一个强大的对象关系映射...
在IT行业中,数据库事务是确保数据一致性的重要机制,特别是在分布式系统和多层架构中,如Spring、Hibernate和MySQL的组合。本实例将深入探讨如何在这样的环境中实现事务管理。 Spring框架以其强大的依赖注入和AOP...
在本项目Demo中,"spring4搭配hibernate5和mysql"揭示了现代Web应用程序开发中的关键技术栈。Spring框架是Java企业级应用的事实标准,而Hibernate是领先的ORM(对象关系映射)解决方案,用于简化数据库操作。MySQL则...
这里我们讨论的是结合Spring、Hibernate和MySQL实现的分页功能,这是一个常见的技术栈组合,广泛应用于Web应用开发。 Spring是一个开源的Java框架,它提供了全面的编程和配置模型,用于构建企业级应用。Spring的IoC...
在这个"Spring mvc+hibernate+mysql Demo"项目中,可能包含了一个简单的示例应用,展示了如何配置和使用这三个技术。"test"文件可能是测试代码或者测试数据,用于验证整个系统的正确性。测试可能涵盖了CRUD操作,...
在IT行业中,Spring、Hibernate和MySQL是开发Java Web应用程序时常用的三大框架和技术。Spring作为一款轻量级的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,提供了全面的企业级应用开发...
在这个项目中,“mongodb整合spring、hibernate、mysql”意味着开发者将MongoDB作为NoSQL数据库,Spring作为应用的管理和数据访问层,而Hibernate则用于处理MySQL的关系型数据库操作。这样的集成允许应用同时利用两...
Struts、Hibernate、Spring 和 MySQL 是Java Web开发中常见的四大技术框架,它们组合起来可以构建高效、可维护的Web应用程序。本项目“struts+hibernate+spring+mysql做的jsp应用系统”是一个完整的示例,旨在帮助...
在Java Web开发中,Spring、Hibernate和MySQL是三个非常重要的组件。Spring作为一款全面的后端应用框架,提供了强大的依赖注入、AOP(面向切面编程)以及MVC(模型-视图-控制器)等特性。Hibernate则是一款优秀的ORM...
标题中的"spring+hibernate+http+mysql jar包"提到了四个关键的Java技术,它们分别是Spring、Hibernate、HTTP和MySQL。这些是构建企业级Java应用的核心组件,下面将详细解释它们及其关联的知识点。 1. **Spring框架...
综合以上信息,我们可以知道这个项目是一个使用Maven构建的Java Web应用,它结合了Spring、Struts2和Hibernate三大框架,利用MySQL数据库存储数据,并且使用C3P0作为数据库连接池。在实际学习或使用这个项目时,你...
Struts2、Spring、Hibernate和MySql这四个技术是Java Web开发中常用的一套经典组合,被称为SSH框架。这个注册登录系统就是利用这些技术构建的。下面将详细讲解这套组合的相关知识点。 首先,Struts2是一个强大的MVC...
在Web应用中,MySQL通常作为后端数据存储,配合像Spring MVC和Hibernate这样的前端框架使用。它的SQL语法简洁明了,支持事务处理,能够处理大量并发读写操作,适合互联网环境下的大数据量存储。 在实际项目中,...
以下将详细介绍如何在Spring中配置和使用Hibernate。 首先,我们需要添加相应的库依赖。Spring和Hibernate的最新版本通常可以在Maven或Gradle的依赖仓库中找到。确保在你的`pom.xml`或`build.gradle`文件中包含...
Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们结合使用可以构建高效、模块化的应用程序,特别是对于处理用户登录和文件上传等常见功能。在这个项目中,"struts+spring+hibernate(mysql)用户登录及...
标题 "Extjs + Spring MVC + hibernate + mysql" 涉及的是一个综合性的Web应用程序开发框架,结合了前端UI库、后端MVC框架、ORM工具和关系型数据库。让我们详细了解一下这些技术及其在实际项目中的应用。 1. ExtJS...