如果我有这段代码
@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。
答案 0 :(得分:0)
我在类似的模型上做过类似的事情:
Category(cat5):
title: Cameras & Photo
Category(cat5.1): {title: Digital Camera, parent: cat5}
只要我将yaml数据用于引导,它就可以工作。因为,只设置了父引用,并且父类别的子列表仍未初始化。在Hibernate中这是有效的,因为外键是正确设置的。它不漂亮但它对我有用。我还没弄明白如何在yaml中处理这些前瞻性声明。