Java 如何使用Objectify在Google云平台的多个实体上使用事务?
我有Entity1和Entity2,他们的经理分别是NewQManager和QAManager以及服务QAService和NewQService。 我想做的是:我想在一个事务中删除Entity1中的问题并将其添加到Entity2,为此,我在AbstractTransaction类中使用Objectify服务,该类由QAService扩展。但是,我得到以下错误:Java 如何使用Objectify在Google云平台的多个实体上使用事务?,java,google-cloud-platform,transactions,google-cloud-datastore,objectify,Java,Google Cloud Platform,Transactions,Google Cloud Datastore,Objectify,我有Entity1和Entity2,他们的经理分别是NewQManager和QAManager以及服务QAService和NewQService。 我想做的是:我想在一个事务中删除Entity1中的问题并将其添加到Entity2,为此,我在AbstractTransaction类中使用Objectify服务,该类由QAService扩展。但是,我得到以下错误: java.lang.IllegalArgumentException: operating on too many entity gro
java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
QuestionManager.java
QAService.getInstance.implementTransaction
回购->{
NewQManager.getInstance.removequestion;
QAManager.getInstance.addOrUpdateItemquestion;
返回true;
};
QAService.java
公共类QAService扩展了AbstractTransaction{
公共静态QAService getInstance{
如果实例!=null
返回实例;
实例=新的QAService;
返回实例;
}
}
AbstractTransaction.java
公共类抽象事务{
公共实现TransactionFunction操作{
返回y.transact->operations.applythis;
}
公共T保存实体{
of y.save.entityentity.now;
返回实体;
}
}
错误
所有这些抽象事务看起来都很奇怪,额外的复杂性可能隐藏了您正在做的事情 数据存储的一个基本限制是在一个事务中只能登记25个实体组。不知何故,你是这样做的,可能是通过@Load Group——从你发布的内容中无法判断 解决方案是在事务中加载更少的内容
java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:52)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:135)
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:109)
at com.google.appengine.api.datastore.Batcher$ReorderingMultiFuture.get(Batcher.java:115)
at com.google.appengine.api.datastore.FutureHelper$TxnAwareFuture.get(FutureHelper.java:186)
at com.googlecode.objectify.cache.TriggerFuture.get(TriggerFuture.java:100)
at com.googlecode.objectify.impl.ResultAdapter.now(ResultAdapter.java:34)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10)
at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:22)
at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:10)
at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
com.vivoiz.healofy.backend.commonServices.services.AbstractTransaction.save(AbstractTransaction.java:44)