私はSpring Rooによって生成されたコードを見てきましたが、persist()
メソッドの作成方法はPropagation.REQUIRES_NEW
です。デフォルトの伝播では十分ではないでしょうか?Spring Rooがpersist()を与える理由Propogation.REQUIRES_NEW
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void Entity.persist() {
if (this.entityManager == null) this.entityManager = entityManager();
this.entityManager.persist(this);
}
いくつかの追加情報。
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log opened at 2011-02-04 10:01:02
project --topLevelPackage org.sotest.sscce --projectName Test --java 6
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log closed at 2011-02-04 10:01:04
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log opened at 2011-02-04 10:01:06
persistence setup --database GOOGLE_APP_ENGINE --provider DATANUCLEUS
entity --class ~.entities.Entity
exit
// Spring Roo 1.1.0.RELEASE [rev 793f2b0] log closed at 2011-02-04 10:02:55
私はDNプロバイダでGAEデータベースを使用しています。私は単にエンティティを作成しましたが、私は上記のrooコマンドを発行する以外のファイルには触れませんでした。 Entity_Roo_Entity.ajを開くと、上記のコードが表示されます。
私はRooの最新バージョンでこれをもう一度試し、同じ出力を確認します。私はこの問題をRoo関連のフォーラムに掲載する予定です。
更新:同じコードは、Rooの1.1.1(最新版)
あなたの質問に対処するための説明を追加しました。 GAE/DNに関連している可能性があります。また、Rooバグかもしれません。 REQUIRES_NEWの理由があるかどうかを知りたいのは、他の私の他のプロジェクトに影響を与えるためです。 – Pace
ああ。私はそれがGAE/DNプロバイダーの使用による可能性が高いと思います。私はそれに応じて私の答えを変更します。その間、GAEのトランザクション分離に関する注釈については、http://code.google.com/appengine/docs/java/datastore/transactions.htmlをご覧ください。 – kaliatech
あなたは正しいようです。 GAEは、休止状態とは異なるトランザクション定義を持っています。これは知っておいてよかった、ありがとう。 – Pace