EBeans в Play Framework
Но может ссылку на обложку держать в альбоме, а не в обложке на альбом?
Я бы попробовал для начала убрать "@ManyToOne" у "Photo cover;". Он там как-то не в тему.
Я просто проходил мимо...Так вроде так и есть.
Но может ссылку на обложку держать в альбоме, а не в обложке на альбом?
Я бы попробовал для начала убрать "@ManyToOne" у "Photo cover;". Он там как-то не в тему.Проблема все таки в генерации ddl создания структуры базы. А именно когда вешает на сущность "on delete". EBeans это делает крайне криво. Буду дома скину что именно он нагенерил.
Вообще как я понял такие вещи не стоит доверять ему, хотя Hibernate с этим справляется достаточно хорошо.
Так это может и ddl исправит...
Так это может и ddl исправит...проблема в том, что EBean неверно понимает аннотации jpa.
Например, если написать
@Column(nullable = false)
То в ddl он не обозначит поле как "NOT NULL".
При удалении альбома, мы говорим чтобы каскадно удалялись фотографии, при каскадном удалении фотографии мы возвращаемся к альбому, так как одна фотография является обложкой для альбома.
Если так, то:
alter table album add constraint fk_album_cover_1 foreign key (cover_id) references photography (id) on delete cascade;
то получается циклическая зависимость, то есть опять пришли к альбому.
Если
alter table album add constraint fk_album_cover_1 foreign key (cover_id) references photography (id) on delete set null;
то получаем javax.persistence.OptimisticLockException
Перевести флан на фото, что оно является обложкой мне кажется не оптимальным и этот подход не удовлетворяет целостности данных, то есть можно программно сделать так, чтобы у альбома было 2 обложки.
Как быть? Может у кого есть мысли?
Оставить комментарий
t1h0n0ff
Совсем недавно принялся изучать Play Framework. Решил что стоит попробовать вместо привычного JPA что-то новенькое. Выбор был не особо велик - EBean.Допустим ситуацию.
Есть альбома, а в нем фотографии:
Альбом:
Альбом в себе имеет в себе фотографии и одна из фотографий является обложкой.
Фото:
Собственно ситуация:
На последней строчке будет ексепшн, собственно ситуация понятна, при каскадном удалении удаляются все фотографии в альбоме, а одна из них ссылается на альбом - cover (обложка), то есть присутствует некоторая цикличность. Что нужно сделать, чтобы удаление прошло успешно?