Hibernate - обновить запрос с предложением where in

Начну с предостережения, что я новичок в гибернации. Допустим, у меня есть такой запрос:

UPDATE entity SET attribute='value' WHERE anotherAttribute IN (val1, val2);

Как правильно выполнить такой запрос, если мой проект использует спящий режим? Должен ли я использовать простой createSQLQuery()? Я хотел бы сделать это более «объектно-ориентированным», но у меня, похоже, проблема с получением данных из существующей базы данных и ее обновлением. Должен ли я использовать createQuery() и получать данные для обновления, а затем думать о списке результатов и использовать сеттеры? Другая проблема заключается в том, где в предложении...

Спасибо за любую помощь.


person Raidmaster    schedule 04.02.2013    source источник


Ответы (1)


«Объектно-ориентированный» способ, поддерживаемый Hibernate, - это API критериев, но он не поддерживает обновления, а только выбирает. Вам нужно будет перебрать его и вызвать установщик для обновления (что хорошо для небольших коллекций и хорошо работает с кешем уровня 2, но катастрофа заключается в том, что ваш набор данных велик). В противном случае используйте HQL или собственный SQL.

Запрос критериев гибернации:

 session.createCriteria(Entity.class)
    .add(Restrictions.eq("attribute", "value"))
    .add(Restrictions.in("anotherAttribute", <collection-of-values>)
    .list();

Еще один вариант, который стоит изучить, — это QueryDSL.

person Καrτhικ    schedule 04.02.2013
comment
Я сделал это немного по-другому в конце. Из-за отсутствия каких-либо других ответов, я думаю, галочка достается вам. Спасибо. - person Raidmaster; 06.02.2013