4

我正在尝试在 play1.2.4 中移植到 YABE 以播放 2.0.4 Java。为此,我创建了一个 initial-data.yml 并尝试使用 Global.java 加载它

#用户
用户:
    - !!models.User
        电子邮件:bob@gmail.com
        密码:秘密
        全名:鲍勃
        isAdmin: 真
#帖子

帖子:

    - !!models.Post
        编号:1
        标题:关于模型层
        发表于:2009-06-14
        作者:     
            - !!models.User
                电子邮件:bob@gmail.com
        内容:>
                    该模型在 Play! 中处于中心位置!应用。切....   

我的 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"));
            }
        }
    }

加载时出现以下错误

构造函数异常:空;无法为 tag:yaml.org,2002:models.Post 构造 java 对象;异常=无法创建属性=JavaBean 的作者=models.Post@1;没有为类模型找到合适的具有 3 个参数的构造函数。用户

org.yaml.snakeyaml.constructor.ConstructorException: null; 无法为 tag:yaml.org,2002:models.Post 构造 java 对象;异常=无法创建属性=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: 真
#帖子

帖子:

    - !!models.Post
        编号:1
        标题:关于模型层
        发表于:2009-06-14
        作者:!!models.User
                电子邮件:bob@gmail.com
        内容:>
                    该模型在 Play! 中处于中心位置!应用。切....   

知道“-”代表什么吗?

于 2012-10-25T08:13:17.133 回答
4

我使用 YAML 已经有一段时间了,但看起来您好像在 Post 中重新创建了一个新用户,而不是引用 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 回答