двунаправленный в test_data.yml

#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.