Hibernate обновление запроса - PullRequest
       0

Hibernate обновление запроса

3 голосов
/ 28 сентября 2011

Кто-нибудь подскажет мне HQL для этого кода SQL

ОБНОВЛЕНИЕ ModelClassname SET ClassVariablename = ClassVariablename + 10 WHERE ClassVariableId = 001;

Ответы [ 5 ]

5 голосов
/ 28 сентября 2011

Нет смысла использовать HQL для этого, вы можете использовать прямой SQL, если вы хотите сделать это, с помощью запроса JDBC (или даже с помощью запроса Hibernate, вы можете использовать запросы SQL).

Использование HQL-запросов для обновления рекомендуется только при выполнении пакетных обновлений, а не в одной строке.http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct

Более объектно-ориентированным способом было бы загрузить ваш объект с помощью HQL, делать то, что вам нужно делать в мире Java (columnValue + = 10, все, что вам нужно сделать), а затемсохраните его обратно, используя сброс сеанса hibernate.

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

3 голосов
/ 28 сентября 2011

Как говорят другие, есть лучшие способы, но если вам действительно нужно, то, например, со следующим синтаксисом:

update EntityName m set m.salary = m.salary +10 where m.id = 1
1 голос
/ 14 февраля 2013

Пожалуйста, попробуйте это

Query q = session.createQuery("from ModelClassname where ClassVariableId= :ClassVariableId");
q.setParameter("ClassVariableId", 001);

ModelClassname result = (ModelClassname)q.list().get(0);
Integer i = result.getClassVariableName();
result.setClassVariableName(i+10);
session.update(result);

С уважением, Lavanyavathi.Bharathidhasan

1 голос
/ 28 сентября 2011

В дополнение к ответу Адама Баткина я хотел бы добавить, что такие запросы обычно не используются (за исключением случаев, когда вам нужно изменить целый ряд строк сразу) в Hibernate.Цель Hibernate - работать с объектами.Так вы обычно делаете:

MyEntity m = (MyEntity) session.get(MyEntity.class, "001");
m.setValue(m.getValue() + 10);
// and the new value will automatically be written to database at flush time
1 голос
/ 28 сентября 2011

Запрос HQL должен выглядеть примерно одинаково, за исключением того, что вместо использования имен таблиц и столбцов следует использовать имена сущностей и свойств (т. Е. Все, что вы используете в Java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...