论坛首页 入门技术论坛

(问题,讨论)hibernate使用DataSource时,Transaction commit...

浏览 9759 次
该帖已经被评为新手帖
作者 正文
   发表时间:2004-02-04  
一 问题在websphere5.0的一个用hibernate访问db2的实际应用中,在hibernate.cfg.xml使用jdbc查询、插入、删除没有任何问题,但是使用jndi时,查询还是没有问题,但删除、插入就出现如下错误:

[04-2-4 20:03:07:141 CST] 7f8c581f JDBCTransacti E net.sf.hibernate.transaction.JDBCTransaction  Commit failed
[04-2-4 20:03:07:141 CST] 7f8c581f JDBCTransacti E net.sf.hibernate.transaction.JDBCTransaction  TRAS0014I: 下列异常已记录 java.sql.SQLException: DSRA9350E: 全局事务期间不允许操作 Connection.commit。
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.commit(WSJdbcConnection.java:535);
[04-2-5 9:06:25:516 CST] 6b177ac2 JDBCTransacti E net.sf.hibernate.transaction.JDBCTransaction  Could not toggle autocommit
[04-2-5 9:06:25:531 CST] 6b177ac2 JDBCTransacti E net.sf.hibernate.transaction.JDBCTransaction  TRAS0014I: 下列异常已记录 java.sql.SQLException: DSRA9350E: 全局事务期间不允许操作 setAutoCommit。
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.setAutoCommit(WSJdbcConnection.java:1806);


我的代码如下,很普通的DaoBean:
        public static void deletePO(PO po); throws HibernateException {
                Session session = null;
                Transaction tx = null;
                try {
                        session = HibernateUtil.currentSession();;
                       tx = session.beginTransaction();;

                        session.delete(po);;
                       tx.commit();;
                }catch(HibernateException he); {
                        if(tx!=null); tx.rollback();;
                        throw he;
                } finally {
                        HibernateUtil.closeSession();;
                }
        }


我的hibernate.cfg.xml如下,我是使用jndi,没有使用jdbc。(我把jdbc给注销掉了):
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!--property name="connection.driver_class">COM.ibm.db2.jdbc.app.DB2Driver</property>
        <property name="connection.url">jdbc:db2:satctldb</property-->
        
       <property name="connection.datasource">jdbc/hibernate</property>
        <!--property name="connection.username">db2admin</property>
        <property name="connection.password">12345678</property-->
        <property name="jdbc.fetch_size">20</property>
        <property name="jdbc.batch_size">20</property>
                
        
        <property name="show_sql">false</property>
        <property name="dialect">net.sf.hibernate.dialect.DB2Dialect</property>

        <!-- Mapping files -->
        <mapping resource="USERINFO.hbm.xml"/>
        <mapping resource="PRIVILEGE.hbm.xml"/>
        <mapping resource="DISPATCHER.hbm.xml"/>
        <mapping resource="ORDERDETAIL.hbm.xml"/>
        <mapping resource="RATETAB.hbm.xml"/>
        <mapping resource="COMPANY.hbm.xml"/>                

    </session-factory>

</hibernate-configuration>


二 自己分析(还有望朋友们指点迷津):
  我搜索了以前的贴子,发现许多网友都有类似问题: 使用jdbc无任何问题,使用DataSource(不管是weblogic还是webshpere)以后,就发现“Could not toggle autocommit”,以前一个贴子说要改hibernate源代码,使得setAutoCommit(false)。我有个问题,就是使用hibernate的Transaction,hibernate是如何setAutoCommit的? 为何使用jndi以后就会出问题?难道是说我有了嵌套事务?如何解决。 谢谢大家!
   发表时间:2004-02-05  
没人回答啊,自己顶一下
0 请登录后投票
   发表时间:2004-02-07  
怎么还是没有人回答,其实我的问题很简单,就是怎么解决容器事务和hibernate事务的关系? 或者是JTA的关系?
0 请登录后投票
   发表时间:2004-02-07  
我很早以前就写了精华贴详细谈过这个问题了,后来又不止一次谈过,你还是搜索一下吧。
0 请登录后投票
   发表时间:2004-02-07  
谢谢robbin,我搜索了以前的贴子,已经知道怎么回事了。
对了,robbin,可否专门建立一个“精华”的板块,大家很需要这样的版块。]
谢谢!
0 请登录后投票
   发表时间:2004-02-07  
每个版都有精华区。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics