SSH整合遇到的bug(一)org.hibernate.TransactionException: nested transactions not supported

出现这个bug的在做修改功能的时候出现,第一次修改提交后,第二次所有的请求都发不出去,代码获取session用的是open,于是修改为getCurrentSession();之后出现如上错误,百度方法如下:

方法:解决方法是去掉

session.beginTransation();

session.getTransaction().commit();

这样问题就解决了!

可是这样还是会报错,Could not obtain transaction-synchronized Session for current thread  继续百度,如下:

方法:在dao层加上@Transaction注解,再运行ok了


加上注解后再次出现 nested transactions not supported,继续百度,如下

方法:session一直存在,那么,这个session获取的事务,只要有一处完成了开启,那么后期处理的时候,全部都是开启的。无需再次开启。否则就会引起事务嵌套问题而报错。

- 问题的关键在于分清楚,到底谁是目标方法,其它的切面以及advisor的执行时机。


于是删除dao层代码中的所有tx = session.beginTransaction();


项目至此不在出错!不明所以,只知能用


### 解决方案 当遇到 `org.hibernate.TransactionException: JDBC begin transaction failed` 错误时,这通常意味着在尝试启动事务之前,JDBC 连接已经出现问题。此问题可能由多种因素引起,包括但不限于配置不正确、资源不可用或网络中断。 #### 配置检查 确保应用程序中的 Hibernate 和数据源配置文件设置无误。特别是要确认数据库方言 (`hibernate.dialect`) 已经被正确定义[^1]: ```properties spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect ``` 如果未指定该属性,则可能会抛出异常 `Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set`. #### 使用连接池优化性能并提高稳定性 引入合适的数据库连接池可以有效缓解因频繁建立新连接而导致的问题。常见的开源解决方案有 HikariCP 或者 Apache Commons DBCP 等工具[^2]。以下是基于 Spring Boot 应用程序的个简单例子来集成HikariCP: ```yaml spring: datasource: type: com.zaxxer.hikari.HikariDataSource hikari: maximumPoolSize: 10 minimumIdle: 5 idleTimeout: 30000 connectionTestQuery: SELECT 1 FROM DUAL ``` 通过上述方式调整最大/最小空闲连接数以及超时时间参数可以帮助维持稳定的连接状态,并减少由于瞬态故障引发的错误几率。 #### 日志记录与监控 增强日志级别以便更好地追踪潜在问题所在位置。对于生产环境而言,建议启用详细的 SQL 执行日志输出,这样可以在发生异常时快速定位根源。 ```java logging.level.org.springframework.transaction=DEBUG logging.level.org.hibernate.SQL=DEBUG ``` 此外,考虑部署专业的 APM(Application Performance Management) 平台用于实时监测应用表现情况,及时发现并处理可能出现的服务降级事件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值