Java JPA删除所有不在谷歌应用程序引擎上工作的内容
我有下面的代码,并试图删除所有的类别,但它是抛出我非法参数异常。我正在使用谷歌应用程序引擎Java JPA删除所有不在谷歌应用程序引擎上工作的内容,java,google-app-engine,jpa,Java,Google App Engine,Jpa,我有下面的代码,并试图删除所有的类别,但它是抛出我非法参数异常。我正在使用谷歌应用程序引擎 public void deleteCategories() { EntityManager em = EMFService.get().createEntityManager(); try { em.getTransaction().begin(); Query q = em.createQuery("DELETE FROM Category cat");
public void deleteCategories() {
EntityManager em = EMFService.get().createEntityManager();
try {
em.getTransaction().begin();
Query q = em.createQuery("DELETE FROM Category cat");
q.executeUpdate();
em.getTransaction().commit();
System.out.println("All records are deleted.");
} catch(Exception ex){
System.out.println(ex.toString());
}
finally {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
}
}
运行这段代码后,我得到javax.persistence.PersistenceException:invalical参数,完整堆栈跟踪如下
原因:java.lang.IllegalArgumentException:需要显式指定跨组事务,请参阅TransactionOptions.Builder.withXGfound这两个元素{
类型:“类别”
名称:“1”
}
和元素{
类型:“类别”
姓名:“100223”
}
猫在你的查询中做什么?我想这就是错误所在,因为用于删除行的常规查询模式如下所示,不需要使用别名: 从mytablename中删除* 或 从mytablename中删除 也许您可以进一步检查已回答的问题->
delete
语句中不需要使用别名,因此您可以从JPQL中删除cat
catch
块部分中的事务EntityManager
后关闭它,通常在finally
块中public void deleteCategories() {
EntityManager em = EMFService.get().createEntityManager();
try {
em.getTransaction().begin();
Query q = em.createQuery("DELETE FROM Category");
q.executeUpdate();
em.getTransaction().commit();
System.out.println("All records are deleted.");
} catch(Exception ex){
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
//should be changed for something like
//log.error("Error while deleting all the categories", ex);
ex.printStacktrace(System.out);
} finally {
em.close();
}
}
感谢Luiggi,但在使用上述方法后,我变得很严重:javax.persistence.PersistenceException:FROM子句的查询类为com.myapp.model.Category,但没有别名我通过输入persistene.xml为gae启用xg事务克服了这个异常,但现在我在一个单独的数据库中操作了太多的实体组交易我认为这与
public void deleteCategories() {
EntityManager em = EMFService.get().createEntityManager();
try {
em.getTransaction().begin();
Query q = em.createQuery("DELETE FROM Category");
q.executeUpdate();
em.getTransaction().commit();
System.out.println("All records are deleted.");
} catch(Exception ex){
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
//should be changed for something like
//log.error("Error while deleting all the categories", ex);
ex.printStacktrace(System.out);
} finally {
em.close();
}
}