Я использую модуль logisimayml 1.5 с моим приложением Play для создания 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;
...
}
Когда я запускаю logisimayml,он создаст файл data.yml, который выглядит следующим образом:
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");
Это не совсем работает, потому что Билл первый, и он хочет найти ребенка Джилл.Джилл, однако, еще не была объявлена, и поэтому она падает.Это связано с тем, что я использовал @OneToMany в Parent и @ManyToOne в Child, что означает, что он двунаправленный.Я мог бы удалить @OneToMany, но я все еще хочу это там для моего кода.Кто-нибудь знает, что я мог бы сделать, чтобы сохранить классы JPA такими, какие они есть, но иметь рендеринг yml без бесконечного цикла между Родителем и Дочерним?
Обновление: Вот исключение, которое я вижу, когдаЯ запускаю свое приложение Play, указывая на data.yml, созданный logisimayml:
RuntimeException occured : Cannot load fixture data.yml: No previous reference found for object of type sites with key User_25
Первый объект в data.yml ссылается на User_25 как дочерний.Объявление User_25 намного дальше в моем data.yml.Как Луффи упоминал ниже, мой простой пример Parent-Child на самом деле не вызывает исключение.Мой настоящий проект имеет довольно большую базу данных, поэтому здесь сложно воспроизвести простой пример, хотя я подумал, что это как-то связано с двунаправленными аннотациями, но, думаю, не все-таки.Я также обновил data.yml для моего примера выше.Я на самом деле делаю то, что сделал Луффи, и создал настоящий проект на простом примере Parent-Child, и после запуска модуля он на самом деле выдал что-то немного отличное от моего созданного вручную yml.Использование этого yml в вызове Fixtures.loadModels (..) на самом деле работает, хотя и не отражает проблему в точности так, как я ее вижу в работе, поэтому мне придется обратиться к вам по этому вопросу.