Java 在Play框架中使用logisimayml模块

Java 在Play框架中使用logisimayml模块,java,playframework,yaml,Java,Playframework,Yaml,我正在将logisimayml 1.5模块与我的Play应用程序一起使用,从我的live数据库中的内容生成yml。模块遍历JPA类来识别子类,以确定写入yml的内容 如果我有两个简单的JPA类,如下所示: public class Parent extends Model { @OneToMany(mappedBy = "parent", targetEntity = Child.class) public List<Child> children; ..

我正在将logisimayml 1.5模块与我的Play应用程序一起使用,从我的live数据库中的内容生成yml。模块遍历JPA类来识别子类,以确定写入yml的内容

如果我有两个简单的JPA类,如下所示:

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;

    ...
}
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
现在,上面的yml确实代表了JPA类所代表的内容,但是我想使用data.yml文件加载到我的应用程序中,使用:

Fixtures.loadModels("data.yml");
这不太管用,因为比尔是第一个,他想找到孩子吉尔。然而,吉尔还没有被宣布,因此它就完蛋了。这是因为我在Parent中使用了@OneToMany,在Child中使用了@ManyToOne,这意味着它是双向的。我可以删除@OneToMany,但我仍然希望它在那里作为我的代码。有人知道我可以做些什么来保持JPA类的原样,但是在父级和子级之间没有无限循环的情况下使用yml渲染吗

更新:当我启动指向logisimayml创建的data.yml的Play应用程序时,我看到的异常情况如下:

RuntimeException occured : Cannot load fixture data.yml: No previous reference found for object of type sites with key User_25
data.yml中的第一个对象将用户_25作为子对象引用。在my data.yml中,用户_25的声明更为深入。正如下面提到的Luffy,我的简单父子示例实际上并没有导致异常发生。我的实际项目有一个相当大的数据库,所以很难在这里的一个简单示例中进行复制,尽管我认为它和双向注释有关,但我想毕竟不是。我还更新了上面示例的data.yml。我实际上做了Luffy做的事情,用简单的父子示例创建了一个实际的项目,在运行模块之后,它实际上产生了一些与我手工制作的yml稍有不同的东西。在Fixtures.loadModels(..)调用中使用该yml实际上是可行的,但它并没有像我在生产中看到的那样准确地反映问题,因此我将不得不就此与您联系。

尝试在多通注释中使用“fetch=FetchType.LAZY”。这可能有助于解决您的问题

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

在我的实际代码中,我有一个类型为lazy的fetch。我只是没有把它包括在我的例子中。奇怪的是,我只是在新的游戏项目中测试你的senario。它成功地加载了boostrap上的简单示例yml。我在那里查了比尔和吉尔。我正在使用play 1.2.4。我手动创建yml文件。使用postgresql进行测试。你说得对。我在OP里放的一个简单的例子实际上是有效的。我的带有大型yml的大型应用程序仍然无法运行。我将不得不用一个实际复制我所看到的问题的例子回来。感谢您在我的超级简单示例中发现这个问题!我已经用logisimayml模块生成的更准确的data.yml更新了我的OP,以及我在我的生产播放应用程序中看到的异常(我还不能使用简单的父子示例重新生成该应用程序),您使用的是哪个播放版本?我这样问是因为在以前的版本中有一个关于加载大型yml文件的bug。