查询in语句造成的 org.hibernate.TransactionException: JDBC rollback failed

news/2024/5/18 22:22:21 标签: jdbc, hibernate, database, session, null, 服务器

最近有遇到很多新的问题,也解决了不少问题,不过因为时间紧也没做记录,做下整理,然后做个记录,已备以后忘了.

org.hibernate.TransactionException: JDBC rollback failed这个错误也折磨我好几天了,最无奈的就是总要服务器重起,连到一定时间就自动挂了,我还要重起一下服务器,就又恢复了正常,我写的方法起实很简单就一个录入,

public void NewRecord(LawInfo li) ...{

        Session session = null;
        Transaction tr = null;
        List list=null;
        try...{
            session = HibernateSessionFactory.currentSession();
            tr = session.beginTransaction();
            session.save(li);
            tr.commit();
        } catch (HibernateException he) ...{
            if(tr!=null)
            System.out.println("录入出错" + he.getMessage());
            tr.rollback();
        } finally ...{
            session.close();
        }
    }
 过一段时间就要重起一下实在很郁闷,不过也没找出什么好的解决方法

看了一个帖子很有启发,

It is quite simple, make sure turn autcommit off for your database

Well, first of all, your code is actually read user information from database, not write to database, so you do not have to use transaction and rollback method.

Secondly, when you update or insert a record to the database, when you use transaction, the database should turn autcommit off already, but I am not sure do you use your own connection pool or not. Please check your connection pool as well.

Thirdly, when you have an error, make sure you always close your hibernate connection. When you catch an Exception, please use the finally to close the hibernate session or connection.
Otherwise you probably will run out of connections.

Please put your detailed error stack trace here if you need more tips for this problem

我认为他说的很有道理,

 我个人认为这个错误的引起有两种情况,不一定都是对的,

1) 连接中断,在操作过程中程序的连接与数据库间的连接突然断开,引起断开的原因很多,有网络问题的,也有程序自身问题的,比如内存溢出.这里就不多说了,连接中断导致操作的中断,jdbc的事物处理就会抛出这样的异常.而这个问题也是最常见的.

2)就是上面所说的,使用hibernate时,要把自动提交关闭.

再就是养成好的编码习惯,我以前编码习惯也很不好,过一段时间自己都不知道是用来做什么用的了,也不利与对程序的排错,调试.   大家一起共勉.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/logonin/archive/2007/10/30/1857928.aspx

 

 

 

以后写程序一定要注意代码的规范,否则无从查起。

后来找到原因是程序中在查询时用了in的sql语句,查询效率低下。 在人数使用过多的情况下服务器就彻底崩溃了。也一定要注意代码的优化。

 

 

 


http://www.niftyadmin.cn/n/1425185.html

相关文章

httpservletrequest和requestbody是否可以同时使用_门诊处方点评 | 地中海贫血患者是否可以使用铁剂?...

地中海贫血和缺铁性贫血是妊娠期妇女小细胞低色素性贫血的两大主要原因,但两者的治疗方法有所不同。地中海贫血以输血治疗为主,必要时辅以祛铁治疗,而缺铁性贫血则以补铁治疗为主。药师在处方点评时,多次发现产科门诊中临床诊断“…

julia常用矩阵函数_为什么说 Julia 更优于 Python?

两大机器学习和统计编程中的常用语言 Julia 和 Python,究竟有何不同?作者 | Emmett Boudreau译者 | 弯月,责编 | 屠敏以下为译文:Julia 是一种多范式、以函数式为主的编程语言,主要用于机器学习和统计编程。Python 是另…

SQL Server 2000和2005 中加载驱动和URL路径 是不同的

在SQL Server 2000 中加载驱动和URL路径的语句是 String driverName "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String dbURL "jdbc:microsoft:sqlserver://localhost:1433; DatabaseNamesample"; 而SQL Server 2005 中加载驱动和url的语句则为 …

python 统计文件行数_python计算文件的行数和读取某一行内容的实现方法

一、计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count len(open(filepath,rU).readlines()) 如果是非常大的文件,上面的方法可能很慢,甚至失效.此时,可…

python安装那个版本好玩_5 安装Python版本的选择

Python是一门解释型的高级计算机语言,所谓解释型,指的是计算机对用Python编写的程序不是预先编译成机器代码,而是在执行时逐条对命令进行翻译并逐条执行的。解释型语言对比编译型语言来说速度会慢一些,但是一般编写程序时会更方便…

DID会固定年份吗_倍分法DID详解 (三):多时点 DID (渐进DID) 的进一步分析

作者:王昆仑 (天津大学)E-mail: shawn0513163.com连享会专题课程:DSGE 模型及应用连享会 DSGE 专题课程这是连享会「倍分法(DID)专题推文」系列的第三篇文章。前两篇文章分别对多种 DID 模型的估计,平行趋势的检验以及政策的动态效果的展示&a…

jmeter压力测试软件

jmeter压力测试软件。。。。利用JMeter进行Web测试(最好).ppt

js去掉前后空格的函数_JavaScript 实现中英文空格

写普通的文案时,我们有约定如何使用空格,但动态内容的处理有两种麻烦情况:字符串插值,例如 {nameA}赞同了{nameB}的回答 文本有时表达式一侧,有时在表达式两侧,也有可能表达式连在了一起各个节点之间&#…