Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Hibernate | JBOSS MSSQL数据源错误_Sql Server_Hibernate_Jboss - Fatal编程技术网

Sql server Hibernate | JBOSS MSSQL数据源错误

Sql server Hibernate | JBOSS MSSQL数据源错误,sql-server,hibernate,jboss,Sql Server,Hibernate,Jboss,当我尝试提交到数据库时,出现以下异常 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

当我尝试提交到数据库时,出现以下异常

    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)mssql-ds.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> 
更新:Hibernate配置文件(Hibernate.cfg.xml)


net.sf.hibernate.dialogue.sqlserverdialogue
java:/TESTDS
100
200
net.sf.hibernate.transaction.JDBCTransactionFactory
假的
真的
..............

我试着在网上搜索,但是找不到任何解决这个问题的方法

谢谢

你试过设置吗

hibernate.connection.autocommit=false

摘自。

您是否尝试过设置

hibernate.connection.autocommit=false


摘自。

编程事务管理代码,这让我很害怕

我建议你试着使用它

您还应该在hibernate.cfg.xml中设置:

<property name="hibernate.connection.autocommit">false</property>
false

编程事务管理代码让我害怕

我建议你试着使用它

您还应该在hibernate.cfg.xml中设置:

<property name="hibernate.connection.autocommit">false</property>
false

几年前我也遇到过类似的问题,正如我正确记得的那样,情况如下

1) some ejb or web applications grabs a connection from jboss pool
2) it sets autocommit to true does some operations with it and the puts it back to pool
3) your ejb grabs the same connection from jboss pool
4) it's previous state of autocommit is set to true, thus transactions using these connection fail

为了克服这个问题,您应该在关闭连接之前将autocommit设置回它以前的值,在所有自定义jdbc代码中,我几年前也遇到过类似的问题,正如我正确记得的,场景如下

1) some ejb or web applications grabs a connection from jboss pool
2) it sets autocommit to true does some operations with it and the puts it back to pool
3) your ejb grabs the same connection from jboss pool
4) it's previous state of autocommit is set to true, thus transactions using these connection fail

为了克服这个问题,您应该在关闭连接之前将autocommit设置回它以前的值,在所有自定义jdbc代码中,当使用来自JavaEE容器管理的数据源的连接时,您无法使用jdbc API控制事务

默认情况下,当您的业务代码结束时,容器决定提交(或回滚),或者将其编写为Servlet、MessageDrivenBean onMessage或EJB方法

如果您想检查事务状态并最终决定将其标记为回滚(默认的容器行为是提交),则必须在Servlet中从JDNI获取对象


对于EJB,您可以通过相应的setter从实例receive获取UserTransaction对象。但它需要使用注释或部署描述符将事务模式设置为“bean managed”。

当使用来自JavaEE容器管理的数据源的连接时,无法使用JDBC API控制事务

默认情况下,当您的业务代码结束时,容器决定提交(或回滚),或者将其编写为Servlet、MessageDrivenBean onMessage或EJB方法

如果您想检查事务状态并最终决定将其标记为回滚(默认的容器行为是提交),则必须在Servlet中从JDNI获取对象


对于EJB,您可以通过相应的setter从实例receive获取UserTransaction对象。但它需要使用注释或部署描述符将事务模式设置为“bean管理”。

您的hibernate.cfg.xml/persistence.xml是什么样子的?您的hibernate.cfg.xml/persistence.xml是什么样子的?在hibernate.cfg.xml中放在哪里?这取决于具体情况。您使用的是.properties还是.xml?如果它是.xml,那么它就去那里了。把它放在哪里,在hibernate.cfg.xml中?这要看情况而定。您使用的是.properties还是.xml?如果它是.xml,那么这就是它的用途。