浏览 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以后就会出问题?难道是说我有了嵌套事务?如何解决。 谢谢大家! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-02-05
没人回答啊,自己顶一下
|
|
返回顶楼 | |
发表时间:2004-02-07
怎么还是没有人回答,其实我的问题很简单,就是怎么解决容器事务和hibernate事务的关系? 或者是JTA的关系?
|
|
返回顶楼 | |
发表时间:2004-02-07
我很早以前就写了精华贴详细谈过这个问题了,后来又不止一次谈过,你还是搜索一下吧。
|
|
返回顶楼 | |
发表时间:2004-02-07
谢谢robbin,我搜索了以前的贴子,已经知道怎么回事了。
对了,robbin,可否专门建立一个“精华”的板块,大家很需要这样的版块。] 谢谢! |
|
返回顶楼 | |
发表时间:2004-02-07
每个版都有精华区。
|
|
返回顶楼 | |