【问题标题】:Yaml fixtures of java playframework doesn't work as expectedjava playframework 的 Yaml 装置无法按预期工作
【发布时间】:2014-07-22 17:52:17
【问题描述】:

我尝试为 play-java 框架制作zenTasks 教程(我使用当前的 playframework,即 2.3.2)。在测试和添加夹具时,我有点迷路了! 该文件指出

Edit the conf/test-data.yml file and start to describe a User:

- !!models.User
    email:      bob@gmail.com
    name:       Bob
    password:   secret
...

我应该下载一个示例(实际上是一个死链接!)

所以我尝试自己添加更多这样的用户:

- !!models.User
    email: somemail1@example.com
    loginName: test1

- !!models.User
    email: somemail2@example.com
    loginName: test2

如果我然后尝试通过

加载它
Object load = Yaml.load("test-data.yml");
if (load instanceof List){
    List list = (List)load;
    Ebean.save(list);
} else {
    Ebean.save(load);
}

我得到以下异常:

[错误] 测试 ModelsTest.createAndRetrieveUser 失败: java.lang.IllegalArgumentException: 这个 bean 的类型是 [class java.util.ArrayList] 没有增强?,花了 6.505 秒 [错误] 在 com.avaje.ebeaninternal.server.persist.DefaultPersister.saveRecurse(DefaultPersister.java:270) [错误] 在 com.avaje.ebeaninternal.server.persist.DefaultPersister.save(DefaultPersister.java:244) [错误] 在 com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1610) [错误] 在 com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1600) [错误] 在 com.avaje.ebean.Ebean.save(Ebean.java:453) [错误]
在 ModelsTest.createAndRetrieveUser(ModelsTest.java:18) [错误]
...

我应该如何加载多个用户(或我希望的任何对象)并毫无例外地解析它们?

【问题讨论】:

    标签: java playframework-2.0 yaml ebean fixtures


    【解决方案1】:

    Ebean 类中save 方法被重载。

    1. save(Object) - 期望参数是实体(扩展 Model,具有 @Entity 注释)
    2. save(Collection) - 需要实体集合。

    Yaml.load 函数返回的对象可以是:

    1. 实体
    2. 实体列表

    但如果我们只是这样做:

    Object load = Yaml.load("test-data.yml");
    Ebean.save(load);
    

    然后save(Object) 方法将被调用。这是因为在编译时编译器不知道Yaml.load 究竟会返回什么。因此,当“test-data.yml”文件中有多个用户时,上面的代码会抛出异常。

    但是当我们按照 OP 提供的代码将结果转换为 List 时,一切正常。调用save(Collection) 方法并正确保存所有实体。所以问题中的代码是正确的。

    【讨论】:

    • 请注意,save() 方法已重载,但在较新版本的 Ebean 中并非如此。在较新版本的 Ebean 中,您使用 saveAll() 来保存实体 bean 的集合。
    【解决方案2】:

    我在从“test-data.yml”加载数据时遇到了同样的问题。但我已经找到了解决这个问题的方法。这是http://kewool.com/2013/07/bugs-in-play-framework-version-2-1-1-tutorial-fixtures/ 解决方案代码。但是所有 Ebean.save 方法都必须替换为 Ebean.saveAll 方法。

    【讨论】:

    • 请在此处将答案的相关部分复制到您的文本中。这样,如果博客文章不可用,答案也不会丢失。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2022-10-21
    • 2018-04-20
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多