2009-08-17 152 views
0

我在使用MySQL的Sun GlassFish Enterprise Server上运行Spring和Hibernate的JPA实现。Query.executeUpdate()导致XAResource异常

当我尝试从数据库中删除的东西:

Query q = entityManager.createQuery("DELETE FROM SomeEntity e"); 
q.executeUpdate(); 

我得到的错误:

Caused by: java.sql.SQLException: Error in allocating a connection. Cause: java.lang.RuntimeException: Got exception during XAResource.start: 
at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:115) 
at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69) 
at org.hibernate.jdbc.AbstractBatcher.openConnection(AbstractBatcher.java:550) 

然而,调用getResultList()所有其他查询工作:

Query q = entityManager.createQuery("SELECT e FROM SomeEntity e"); 
q.getResultList(); 

由于某些原因,JDBC驱动程序无法获得executeUpdate()的连接,但它适用于getResultList()。应用程序的MySQL帐户拥有包括INSERT和DELETE在内的所有权限。

+0

您是否尝试过使用您的MYSQL版本附带的驱动程序? – 2009-08-18 03:18:19

回答

0

我想你正在使用jta-datasource。我认为,你没有开始交易。或者你的数据源可能存在一些问题。所以,你应该测试你的数据源(你可以同时定义jta-data-source和non-jta-data-source)。你需要确保所有的更新都是在事务环境中完成的。

0

一般来说,XAResource意味着你在分布式事务中。在这种情况下,您必须使用XA驱动程序来创建数据库数据源和连接(例如,com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)