hibernate 使用注解+拦截器实现自动开启、关闭session,提交、回滚事务
2023-12-31 23:25:38
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
文章来源:https://blog.csdn.net/qq445829096/article/details/135311015
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!