Как удалить элемент ManyToMany с помощью JPQL? - PullRequest
0 голосов
/ 28 июня 2011

У меня есть две модели, скажем:

BlogPost(title, message)
Tags(name)

Для обоих определено отношение ManyToMany.

Используя JPQL, я удаляю список BlogPost с этим запросом:

DELETE FROM BlogPost b WHERE b IN :list

(: список - это список из предыдущего запроса SELECT).

При этом у меня есть ConstraintViolationException из-за связи между BlogPost и Tags.

Есть ли способ удалить отношение, не удаляя теги с использованием JPQL?

Спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 28 июня 2011

JPA создает таблицу BlogPost_Tags, в которой хранятся идентификаторы BlogPost и теги.

Поэтому при попытке удалить BlogPost не удалось выполнить ограничение на BlogPost_Tags.

Необходимо удалить отношениеперед удалением сообщения, и в JPQL нет простого способа, вам нужно использовать EntityManager.

0 голосов
/ 29 июня 2011

Я отвечу себе предложенным мною решением.Я не уверен, что это лучший, но, по крайней мере, он работает.

Так как вы хотите массово удалить что-то, имеющее элементы, связанные с ManyToMany, вы должны сначала удалить отношение (в таблице соединений)или выполните цикл и для каждого элемента удалите вручную (безумный и слишком тяжелый).

Итак, поскольку JPQL не позволяет это сделать, возможный способ - сделать собственный запрос SQL для удаления нужного идентификатора в связанной таблице, а затем выполните массовое удаление.

0 голосов
/ 28 июня 2011

Прежде чем удалять сущность, необходимо сначала удалить связь.

...