Query.executeUpdate()导致XAResource异常

时间:2009-08-17 22:48:41

标签: java hibernate jpa jdbc java-ee

我正在使用MySQL在Sun的GlassFish Enterprise Server上运行Spring和Hibernate的JPA实现。

当我尝试从数据库中删除内容时:

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。

2 个答案:

答案 0 :(得分:0)

我假设您正在使用jta-datasource。我想,你没有开始交易。或者你可能在数据源方面遇到了一些问题。因此,您应该测试您的数据源(您可以定义jta-data-source和non-jta-data-source)。并且您需要确保所有更新都在事务上下文中完成。

答案 1 :(得分:0)

通常,XAResource意味着您在分布式事务中。在这种情况下,您必须将XA驱动程序用于DB数据源和连接(例如com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)