4

play1.2.4 で YABE に移植して 2.0.4 Java をプレイしようとしています。そのために、initial-data.yml を作成し、Global.java でロードしようとしました

#ユーザー
ユーザー:
    - !!models.User
        メール: bob@gmail.com
        パスワード: シークレット
        フルネーム: ボブ
        isAdmin: 真
#投稿

投稿:

    - !!models.Post
        ID: 1
        title: モデル層について
        投稿日: 2009-06-14
        著者:     
            - !!models.User
                メール: bob@gmail.com
        内容: >
                    モデルはプレイの中心的な位置を占めています。応用。切る....   

私のGlobal.javaは以下です

public void onStart(Application app) {
        InitialData.insert(app);
    }

    static class InitialData {
        public static void insert(Application app) {
            if(Ebean.find(User.class).findRowCount() == 0) {
                Map<String, List<Object>> all = (Map<String, List<Object>>)Yaml.load("initial-data.yml");
                Ebean.save(all.get("users"));
                Ebean.save(all.get("posts"));
                Ebean.save(all.get("comments"));
            }
        }
    }

ロード中に次のエラーが発生します

コンストラクター例外: null; tag:yaml.org,2002:models.Post; の Java オブジェクトを作成できません。exception=JavaBean=models.Post@1 のプロパティ=作成者を作成できません。クラス モデルの 3 つの引数を持つ適切なコンストラクターが見つかりませんでした。ユーザー

org.yaml.snakeyaml.constructor.ConstructorException: null; tag:yaml.org,2002:models.Post; の Java オブジェクトを作成できません。exception=JavaBean=models.Post@1 のプロパティ=作成者を作成できません。クラス モデルの 3 つの引数を持つ適切なコンストラクターが見つかりませんでした。ユーザー

     org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:333)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructSequenceStep2(BaseConstructor.java:277)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructSequence(BaseConstructor.java:248)

     org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlSeq.construct(SafeConstructor.java:440)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:326)

     org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:143)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:307)

     org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:459)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:142)

     org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:128)

     org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)

     org.yaml.snakeyaml.Yaml.load(Yaml.java:411)

なぜこれが起こるのですか?

4

2 に答える 2

5

マヌエル、助けてくれてありがとう。

YAMLを少し変更して動作させたところ、「model.class」の前にある「-」を削除しました。

#ユーザー
ユーザー:
    -!! models.User
        メール:bob@gmail.com
        パスワード:シークレット
        フルネーム:ボブ
        isAdmin:true
#投稿

投稿:

    -!! models.Post
        id:1
        タイトル:モデルレイヤーについて
        投稿日:2009-06-14
        著者:!! models.User
                メール:bob@gmail.com
        コンテンツ:>
                    モデルはPlayの中心的な位置にあります!応用。切る....   

「-」が何を表すのか、何か考えはありますか?

于 2012-10-25T08:13:17.133 に答える
4

YAML を使用してしばらく経ちましたが、Bob を参照する代わりに、投稿で新しいユーザーを再作成しているように見えます。

私はこのようなことを試してみます:

models.User(bob):
  email:      bob@gmail.com
  password:   secret
  fullname:   Bob
  isAdmin:    true

models.Post(firstPost):
  id:         1
  title:      About the model layer
  postedAt:   2009-06-14
  author:     bob
  content:    The model has a central position in a Play! application.
于 2012-10-25T06:15:22.907 に答える