test_data.yml中的双向

时间:2011-04-29 08:36:54

标签: hibernate jpa playframework

如果我有这段代码

@Entity
public class Category extends Model {

    public String title;

    public Category() {}

    public Category(String title) {
        this.title = title;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name="parent")
    public List<Category> children = new LinkedList<Category>();

    @ManyToOne
    @JoinColumn(name="parent", insertable=false, updatable=false)
    public Category parent;

    public void addChild(Category child) {
        Category root = this;
        child.parent = root;
        root.children.add(child);
        root.save();
    }
}

我想在我的 test_data.yml 文件中创建测试数据,如何在那里输入?我的意思是这是双向的..

例如,如果我这样做:

 Category(root1):
   title: root
   children: [child1, child2]

 Category(child1):
   title: child1
   parent: root1

 Category(child2):
   title: child2
   parent: root1

我会收到此错误:

  

无法加载夹具initial-data.yml:   没有找到对象的先前参考   具有关键child1的儿童类型

但如果我不输入此内容:children: [child1, child2]那么我的结构会有错误, child1 child2 不会生成root。

1 个答案:

答案 0 :(得分:0)

我在类似的模型上做过类似的事情:

Category(cat5):
  title: Cameras & Photo
Category(cat5.1): {title: Digital Camera, parent: cat5}

只要我将yaml数据用于引导,它就可以工作。因为,只设置了父引用,并且父类别的子列表仍未初始化。在Hibernate中这是有效的,因为外键是正确设置的。它不漂亮但它对我有用。我还没弄明白如何在yaml中处理这些前瞻性声明。