This transaction must be active.
java.lang.IllegalStateException: This transaction must be active.
というエラー。
ググっても有用そうな情報はこれだけ
transctionがネストしている気配 RT @xicholo: This transaction must be active.というエラーに悩まされ中。。。 #slim3 #appengine
いろいろやって、表面的な原因はわかった。
GlobalTransaction gtx = Datastore.beginGlobalTransaction();
gtx.put(room);
gtx.put(pcArr.get(0));
gtx.put(pcArr.get(1));
gtx.put(pcArr.get(2));
gtx.commit();
ちなみにpcArrの中にはPcが入ってます。
さらにroomは子としてpcを複数個持ちます(1対多)。
結論を一言で言うと、pcArr.get(2)がnullで、gtx.put(pcArr.get(2));をコメントアウトすると正常にいきあました。
子供のリレーションをもっていて、かつnullだからエラーになったのか、
それともリレーション関係なしにnullのものをputしたからエラーになったのか、
検証してないんではっきりはわかりませんが、
とりあえずnullのものをputしなきゃokだということだと思います。