У меня есть две сущности, сущность "фильм" и сущность "Клип", каждый клип принадлежит одному фильму, а фильм может иметь несколько клипов.
Мой код выглядит так:
Movie.java
@OneToMany(mappedBy = "movie", targetEntity = Clip.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Clip> clips = new HashSet<Clip>();
Clip.java
@ManyToOne
@JoinColumn(name="movie_id")
private Movie movie;
Таблицы создаются, и каждый клип имеет столбец "movie_id", но это приводит к тому, что мое приложение заканчивается бесконечным циклом, когда я запрашиваю данные
@Path("/{id:[0-9][0-9]*}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Movie lookupMovieById(@PathParam("id") long id) {
return em.find(Movie.class, id);
}
result:
{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1,"name":"Walkthrough"}],"clips":[{"id":1,"version":1,"name":"MGS Walkthrough P1","keywords":null,"movie":{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1,"name":"Walkthrough"}],"clips":[{"id":1,"version":1,"name":"MGS Walkthrough P1","keywords":null,"movie":{"id":1,"version":1,"name":"MGS Walkthrough","filename":"video.mp4","movieCategories":[{"id":1,"version":1,"name":"Walkthrough"}],"clips":[{"id":1,"version":1,"name":"M...
Это тот же результат, когда я запрашиваю клип.
Когда я изменю его на отношения @ManyToMany, таких проблем не будет, но это не то, что мне нужно здесь. Вы можете мне помочь? Установка fetchType в Lazy не сработала.
Изменить: я использую текущую студию разработки JBoss
Изменить:
Я "решил" это, прочитав эту статью:
http://blog.jonasbandi.net/2009/02/help-needed-mapping-bidirectional-list.html
"Чтобы сопоставить двунаправленную по отношению ко многим, со стороны" один-ко-многим "в качестве стороны-владельца, вам нужно удалить элемент mappedBy и установить много в один @JoinColumn как вставляемый и обновляемый в false. Это решение очевидно, не оптимизированы и будут вызывать некоторые дополнительные инструкции UPDATE."
когда я запрашиваю фильм, я получаю следующий ответ:
{ "id": 1, "version": 1, "name": "MGS Walkthrough", "filename": "video.mp4", "movieCategories": [{ "id": 1, "version": 1, "имя": "Прохождение" }], "клипы": [], "описание": "Трейлер zu mgs4" }
запись "клипы" по-прежнему появляется. Является ли это еще неправильным решением или мне просто нужно жить с этим?