java - 在哪里使用 JPA/Google App Engine 设置 TransactionOptions?

标签 java google-app-engine jpa persistence

我在 GAE 中使用 JPA 来持久化对象。

javax.persistence.PersistenceException: Illegal argument
    at org.datanucleus.api.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:298)
    at org.datanucleus.api.jpa.JPAEntityTransaction.commit(JPAEntityTransaction.java:122)
Caused by: java.lang.IllegalArgumentException: cross-group transaction need to be explicitly specified, see TransactionOptions.Builder.withXGfound both 
Element {
  type: "Event"
  id: 0x11000000000000
}
and Element {
  type: "User"
  id: 0x14000000000000
}

事件和用户之间存在双向多对多关系。当我插入新事件并将其绑定(bind)到事务内的现有用户时,我收到上述异常。 从错误消息中我看到我需要调整 TransactionOptions 。我可以在哪里设置这些选项?

最佳答案

persistence.xml 中设置以下属性:

<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true" />

目前无法为单个 JDO 或 JPA 事务启用 XG 事务。相反,您可以为所有事务指定此项。 [docs]

关于java - 在哪里使用 JPA/Google App Engine 设置 TransactionOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606651/

相关文章:

使用 Apache HttpClient 的 Java HTTPPost 请求

python - 如果出错,如何重试 urlfetch.fetch 几次?

python - 如何从代码而不是 Google App Engine 上的文件呈现 Django 模板

google-app-engine - 超出软进程大小限制错误。怎么修?

java - JPA:使用复合键的多个一对多关系

java - 如何使用 JPA 将各个列映射到集合中

针对不同上下文的 Java 序列化

java - 在 fragment 之间共享代码

Java外部程序

jakarta-ee - JPA 不能用于在 HttpSession 中管理的 CDI 范围?