当前位置: 首页 > news >正文

hibernate 使用注解+拦截器实现自动开启、关闭session,提交、回滚事务

hibernate 使用注解+注解拦截器实现自动开启、关闭session,开启、提交、回滚事务

项目为springboot项目 ,springboot版本为:2.5.11, hiernate-core5.4.3 版本。spring-xxx 等为5.3.17版本

注意:在spring-xxx4.x版本+ hiernate-core5.x.x版本中,hibernate的配置 true是有效的,如果不主动开启事务,则sesson每次执行会自动提交事务,到了hiernate-core5.x.x 版本。spring-xxx 等为5.x.x版本后true无效,只要执行DML(select除外) ,就必须手动session.beginTransaction();开启、提交事务、否则会以下错误

com.wying.base.exception.DaoException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query

虽然这样更严谨,但是很多基础表单,就一条DML语句(select除外),执行失败了就失败了,没啥好回滚的,也是必须要先开启事务执行很是繁琐

项目使用的 hibernate session 执行DML语句,传统方式如下,每次需要手动关闭session, 开启、提交、回滚事务,比较繁琐,session忘记关闭会导致连接池泄露,进而产生系统宕机的风险

   /*** 修改表单数据* @param omSysConfigDto_Param* @return*/public int updateData(OmSysConfigDto omSysConfigDto_Param) {Session session = null;Transaction transaction = null;try {session = getSessionFactory().openSession();transaction = session.beginTransaction();String sql = "update om_sys_config set CONFIG_NAME=:configName,CONFIG_KEY=:configKey,CONFIG_VALUE=:configValue,MNEMONIC_CODE=:mnemonicCode ," +" PINYIN_CODE=:pinyinCode, " +" DISPLAY_ORDER=:displayOrder,MODIFY_USER=:modifyUser,MODIFY_DATE=:modifyDate,REMARK=:remark where TID=:tid";Query query = getQuery(sql, omSysConfigDto_Param, session);int i = query.executeUpdate();transaction.commit();return i;} catch (Exception e) {transaction.rollback();e.printStackTrace();throw new DaoException(e.getMessage());} finally {if (session != null) {session.close();}}}

使用注解+注解拦截器+ThreadLocal线程变量优化

1、 定义OpenSession注解
package com.gaom.base.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.a
http://www.lryc.cn/news/270560.html

相关文章:

  • Solidworks学习笔记
  • Redis经典五大类型源码及底层实现(一)
  • 数据库闭包求法 附相关习题及解析
  • idea利用JRebel插件,无需重启,实现Spring Boot项目热重载,节省开发时间和精力!
  • 学习体系结构 - AArch64内存管理
  • Vue3 精通指南:如何在 setup 函数中巧妙利用 Vuex
  • Linux 服务器安全策略技巧:启用账户锁定策略
  • 野火霸道-V2+3.2寸屏+FreeRTOS+LVGL移植
  • 操作教程|MeterSphere UI测试+VNC:简单、快捷地查看UI测试实时执行详情
  • 工具--Git详解
  • windows server 2022 启用SYN攻击保护
  • 汽车保养软件app开发步骤
  • 【HarmonyOS】ArkTS语言介绍与组件方式运用
  • 音频播放软件Foobar2000 mac特点介绍
  • Oracle动态性能视图 v$parameter 和 v$parameter2 的区别
  • ssrf之dict协议和file协议
  • OpenAI GPT 模型 API 接口新增参数 top_logprobs 和 logprobs
  • React项目打包流程
  • 04-获取认证的用户身份信息
  • 二叉树的中序遍历,力扣
  • shiro1.10版本后-IniSecurityManagerFactory过期失效
  • 阿里后端实习二面
  • 「Kafka」生产者篇
  • C语言实现RSA算法加解密
  • 如何设计前后端分离的系统架构?
  • 【强化学习】SARAS代码实现
  • P1019 [NOIP2000 提高组] 单词接龙 刷题笔记
  • 如何实现WinApp的UI自动化测试?
  • chrome扩展程序开发之在目标页面运行自己的JS
  • NLP项目之语种识别