2009-08-17 155 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)