Использование модуля logisimayml с Play Framework - PullRequest
0 голосов
/ 12 января 2012

Я использую модуль 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 (..) на самом деле работает, хотя и не отражает проблему в точности так, как я ее вижу в работе, поэтому мне придется обратиться к вам по этому вопросу.

1 Ответ

0 голосов
/ 12 января 2012

Попробуйте использовать "fetch = FetchType.LAZY" в аннотации ManyToOne. Это может помочь решить вашу проблему.

@ManyToOne(name = "parent_id", fetch = FetchType.LAZY)
...