Разница между запросом удаления HQL и сеансом.удалить()

#java #hibernate #hql-delete

#java — язык #переход в спящий режим #hql-удалить

Вопрос:

Я совсем новичок в гибернации, и у меня есть вопрос. В чем разница между удалением объекта с помощью запроса HQL и удалением объекта с помощью delete(...) метода Session класса?

Ответ №1:

Session.delete(...) полезно только в том случае, если у вас уже есть ссылка на объект, который вы хотите удалить.

удаление по запросу полезно для удаления нескольких объектов в соответствии с определенными критериями, объектов, которые вы, возможно, ранее не загружали в сеанс.

Я считаю, что удаление по запросу фактически загружает каждый объект в сеанс и удаляет их по отдельности — кто-нибудь, поправьте меня, если я ошибаюсь в этом.

Комментарии:

1. Но оба делают целевые объекты временными?

2. @Patrick: Если эти объекты были ранее загружены в сеанс, да

3. Два других объекта имеют ссылки на объект, который я хочу удалить (в коллекциях). Может ли Hibernate удалить эти ссылки или я должен сделать это сам?

4. Он преобразует запрос в собственный запрос и выполняет его. Я думаю, что они не загружаются. Важным замечанием является то, что он не учитывает каскады

5. Я имел в виду ответ (последний абзац)