#hibernate #jpa #playframework
#переход в спящий режим #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
Я бы получил эту ошибку:
Не удается загрузить начальные данные устройства.yml: Не найдено предыдущей ссылки для объекта дочернего типа с ключом child1
Но если бы я не ввел это: children: [child1, child2]
тогда у меня была бы неправильная структура, дочерние элементы и дочерние элементы 2 не ссылались бы на root.
Комментарии:
1. я исправил: Категория (дочерняя 1): заголовок: дочерняя 1 Категория (дочерняя 2): заголовок: дочерняя 2 Категория (корневая 1): заголовок: дочерние элементы root: [дочерние 1, дочерние 2]
Ответ №1:
Я делал похожие вещи на похожей модели:
Category(cat5):
title: Cameras amp; Photo
Category(cat5.1): {title: Digital Camera, parent: cat5}
Это работает до тех пор, пока я использую данные yaml только для начальной загрузки. Потому что установлена только родительская ссылка, а дочерний список родительской категории остается неинициализированным. В гибернации это работает, потому что внешний ключ установлен правильно в любом случае. Это некрасиво, но у меня работает. Мне еще предстоит выяснить, как обращаться с этими объявлениями о пересылке в yaml.