解决Hibernate的session.save/update/delete操作无效问题(事务管理)

本文探讨了在使用Hibernate框架进行数据持久化操作时遇到的session.save/update/delete无效问题,并提供了两种解决方案:一是通过代码显式地开启和提交事务;二是采用注解方式实现事务管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期开始玩Hibernate了,因为之前开发用的都是Mybatis,刚开始用Hibernate发现了许多问题。

其中一个问题就是session.save/update/delete无效的问题。

导致这个问题最可能的原因是未开启事务。

Hibernate的增删改操作都是要提交才能生效的,当我们执行session.save(obj)操作后,其实并没有提交。

有两种解决方案

一、开启事务管理

1.在代码中开启事务管理(不推荐)

session.beginTransaction();
session.save(user);
session.getTransaction().commit();
2.在业务逻辑层以注解@Transcational的方式来管理事务(推荐)

@Transactional
public void soSomeThing(){
	//一系列数据持久化操作
}

这种方式是使用了面向切面的编程思想,是一般工程项目的主要做法,对代码的侵入性小。

二、如果是以非事务的方式开始执行持久化操作,执行session.close()即可提交操作到数据库。注意,这种方法只在save()操作下有效,在update/delete下还是会失效,update和delete操作需要把new的带有唯一标识符(id)的对象从transient状态转换到persistent状态。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值