Я использую Play 2.2.3 с Java для базы данных DB2.Скопируйте объект с ebean и получите идентификатор нового объекта
Моя цель - сделать копию объекта, сохранить его в базе данных, а затем получить идентификатор нового объекта, чтобы использовать его в перенаправлении.
Кодекс выглядит следующим образом:
Teilnehmer teilnehmer = Teilnehmer.getTeilnehmer(id);
Teilnehmer copy = (Teilnehmer) teilnehmer._ebean_createCopy();
copy.id = null;
copy.save();
Ebean.refresh();
return updateTeilnehmerForm(copy.id);
copy
-объект прекрасно и точно, как мне это нужно, и это правильно сохраняется в базе данных. Проблема в том, что я не могу позвонить Ebean.refresh()
, потому что copy.id
объекта-копии все еще null
, и это то же самое для вызова метода в операторе return.
Сообщение об ошибке (из Ebean.refresh()
):
java.lang.NullPointerException: The id is null
at com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.setId(DefaultOrmQuery.java:1125)
at com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.setId(DefaultOrmQuery.java:52)
at com.avaje.ebeaninternal.server.core.DefaultBeanLoader.refreshBeanInternal(DefaultBeanLoader.java:413)
at com.avaje.ebeaninternal.server.core.DefaultBeanLoader.refresh(DefaultBeanLoader.java:356)
at com.avaje.ebeaninternal.server.core.DefaultServer.refresh(DefaultServer.java:509)
at com.avaje.ebean.Ebean.refresh(Ebean.java:634)
at controllers.Application.copyTeilnehmer(Application.java:138)
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$18$$anonfun$apply$18.apply(routes_routing.scala:249)
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$18$$anonfun$apply$18.apply(routes_routing.scala:249)
at play.core.Router$HandlerInvoker$$anon$7$$anon$2.invocation(Router.scala:183)
at play.core.Router$Routes$$anon$1.invocation(Router.scala:377)
at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:56)
at play.GlobalSettings$1.call(GlobalSettings.java:64)
at controllers.BSBTVSecurity$AuthenticatedAction.call(BSBTVSecurity.java:41)
at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:91)
at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:90)
at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82)
at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82)
at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251)
at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:37)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Я попытался с помощью явных геттеры и сеттеры для Id, но ничего, кажется, работает в данный момент. Я также попытался получить следующий идентификатор из последовательности базы данных, но только вернулся null
. Похоже, что Ebean использует общую платформу, а не конкретную платформу DB2Platform, которая может быть проблемой.
Когда я не отправляю сообщение updateTeilnehmerForm
и просто перезагружаю страницу обзора, на которой должна появляться новая запись базы данных, все в порядке, и шаблон, похоже, может читать идентификатор.
Надеюсь, у вас есть идея, потому что я в недоумении.