当我尝试提交数据库时,我会得到以下异常
java.sql.SQLException: You cannot commit with autocommit set!
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.jdbcComm
it(BaseWrapperManagedConnection.java:545)
at org.jboss.resource.adapter.jdbc.WrappedConnection.commit(WrappedConne
ction.java:334)
at net.sf.hibernate.id.TableGenerator.generate(TableGenerator.java:126)
at net.sf.hibernate.id.TableHiLoGenerator.generate(TableHiLoGenerator.ja
va:59)这是我的JBOSS (jboss-4.0.5.GA) MSSQLds.xml :-
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>TESTDS</jndi-name>
<connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=TESTDB</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<user-name>sa</user-name>
<password>password</password>
<check-valid-connection-sql>SELECT 1 FROM sysobjects</check-valid-connection-sql>
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
</local-tx-datasource>
</datasources> 这里是我的提交操作(使用事务) :-
public synchronized void commitTransaction() throws TransactionException {
Transaction tx = (Transaction) localTransaction.get();
Session session = (Session) localSession.get();
try {
tx.commit();
}
catch (HibernateException e) {
log.error("Error closing the persistence when commiting.", e);
rollbackTransaction();
throw new TransactionException(e);
}
finally {
try {
session.close();
}
catch (HibernateException e) {
log.fatal("Session could not be closed !!!", e);
}
localSession.set(null);
localTransaction.set(null);
}
log.info("Commiting transaction with thread : " + Thread.currentThread());
}更新: Hibernate配置文件(hibernate.cfg.xml)
<!-- SQLSERVER configuration -->
<property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property>
<property name="connection.datasource">java:/TESTDS</property>
<property name="connection.pool_size">100</property>
<property name="statement_cache.size">200</property>
<property name="transaction.factory_class">net.sf.hibernate.transaction.JDBCTransactionFactory</property>
<property name="show_sql">false</property>
<property name="use_outer_join">true</property>
<!-- Hibernate mapping files configuration -->
..............
<!-- Hibernate mapping files configuration -->
我试着在网上搜索,但找不到解决这个问题的办法。
谢谢。
发布于 2012-03-23 09:08:24
当使用来自由DataSource容器管理的JavaEE的连接时,您无法使用JDBC控制事务。
默认情况下,当业务代码结束时,容器决定提交(或回滚),或者将其编写为Servlet、MessageDrivenBean onMessage或EJB方法。
如果要检查事务状态并最终决定将其标记为回滚(默认容器行为为提交),则必须在Servlet中从JDNI获取UserTransaction对象。
对于EJB,可以从实例所接收的带有相应的setter的上下文中获取该上下文对象。但是它需要使用TransactionManagement注释或在部署描述符中将事务模式设置为“bean管理的”。
发布于 2011-04-22 06:07:06
你试过设置
hibernate.connection.autocommit =假?
从hibernate文档拿来的。
发布于 2011-04-25 12:04:36
编程事务管理代码吓到我了。
我建议你尝试使用Spring声明式事务管理。
您还应该在hibernate.cfg.xml中设置:
<property name="hibernate.connection.autocommit">false</property>https://stackoverflow.com/questions/5740434
复制相似问题