Session.delete(...)
полезно, только если у вас уже есть ссылка на сущность, которую вы хотите удалить.
delete-by-query полезен для удаления нескольких объектов в соответствии с определенными критериями, объектов, которые вы, возможно, ранее не загружали в сеанс.
Я считаю, что удаление по запросу фактически загружает каждую сущность в сеанс и удаляет их по отдельности - кто-то исправит меня, если я ошибаюсь.