2012-01-12 11 views
0

私はライブアプリケーションでlogisimayml 1.5モジュールを使用して、ライブデータベースのコンテンツからymlを生成しています。モジュールはJPAクラスを走査して、ymlに何が書き出されるかを判断するために子を識別します。Play Frameworkでlogisimaymlモジュールを使用する

私はこのような2つの単純なJPAクラスだったのであれば:今すぐYMLを

Parent(Parent_1): 
name: Bill 
children: 
- Child_1 

Parent(Parent_2): 
name: Bill 

Child(Child_3): 
name: Jill 

Child(Child_1): 
name: Jill 
parent: Parent_1 

public class Parent extends Model { 

    @OneToMany(mappedBy = "parent", targetEntity = Child.class) 
    public List<Child> children; 

    ... 
} 

public class Child extends Model { 

    @ManyToOne 
    @JoinColumn(name = "parent_id") 
    public Parent parent; 

    ... 
} 

を私はlogisimaymlを実行すると、それはこのようになりますdata.ymlファイルを生成します上記のJPAクラスの表現を表していますが、data.ymlファイルを使用してアプリケーションにロードする場合は、次のようにしてアプリケーションにロードします。

Fixtures.loadModels("data.yml"); 

これは、Billが最初であり、子供Jillを探したいので、うまくいきません。しかし、ジルはまだ宣言されておらず、したがって、それは転倒する。これは、親と子の両方で@OneToManyを使用していることと、双方向であることを意味する子で@ManyToOneの両方を使用していることに起因しています。私は@OneToManyを削除することができますが、私はまだそこに自分のコードを入れたいです。誰もJPAクラスをそのまま保つために何ができるのか分かっていますが、親と子の間に無限ループなしでymlレンダリングがありますか?

アップデート:私はlogisimaymlによって作成されたdata.ymlを指して私のプレイアプリを起動したときに表示さ例外:

RuntimeException occured : Cannot load fixture data.yml: No previous reference found for object of type sites with key User_25 

子としてdata.yml参照User_25の最初のオブジェクト。私のdata.ymlでは、User_25の宣言がずっと下にあります。私の単純なParent-Childの例では、実際に例外が発生することはありません。私の実際のプロジェクトは非常に大きなデータベースを持っているので、ここで簡単な例で複製するのは難しいですが、双方向アノテーションと関係があると思っていましたが、結局はそうは思いません。上記の例ではdata.ymlも更新しました。私は実際にルフィがやったことをして、単純な親子の例で実際のプロジェクトを作りました。モジュールを実行した後、私の手で作られたymlとは少し違ったものが実際に作られました。 Fixtures.loadModels(..)呼び出しでそのymlを使用すると、実際には動作しますが、本番環境での表示とまったく同じ問題が実際に反映されるわけではありません。

答えて

0

ManyToOneアノテーションで "fetch = FetchType.LAZY"を使用してください。これはあなたの問題を解決するのに役立つかもしれません。

@ManyToOne(name = "parent_id", fetch = FetchType.LAZY) 
+0

私の実際のコードでは、フェッチタイプが怠け者です。私はちょうどOPの私の例にそれを含めていない。 – digiarnie

+0

新作プロジェクトであなたのシナリオをテストするのは奇妙です。その簡単な例ymlは、ブーストラップで成功しました。私はそこにdbとbillの両方をチェックしました。私はプレイ1.2.4を使用しています。そして私はymlファイルを手動で作成します。テストのためにpostgresqlを使用しました。 – Luffy

+0

あなたは正しいです。 OPに入れた簡単な例が実際に動作します。大きなymlの私の大きなアプリはまだ動作しません。私は実際に私が見ている問題を再現する例を取り戻さなければならないでしょう。私の超簡単な例でその問題を見つけてくれてありがとう! – digiarnie

関連する問題