我正在使用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。
答案 0 :(得分:0)
我假设您正在使用jta-datasource。我想,你没有开始交易。或者你可能在数据源方面遇到了一些问题。因此,您应该测试您的数据源(您可以定义jta-data-source和non-jta-data-source)。并且您需要确保所有更新都在事务上下文中完成。
答案 1 :(得分:0)
通常,XAResource意味着您在分布式事务中。在这种情况下,您必须将XA驱动程序用于DB数据源和连接(例如com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)