slim3 グローバルトランザクションでThis transaction must be active.が出て嵌る

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だということだと思います。