Что вызвало спящий генерировать предложение обновления? - PullRequest
2 голосов
/ 15 декабря 2011

Я использую Hibernate для выбора данных из представления (определяется следующим образом):

from test where trim(id)='1111'

но hibernate генерирует следующее условие обновления :

update test set id=?, dd=? where id='1111'

У кого-нибудь есть предложения? Кажется, это ошибка Hibernate?

1 Ответ

3 голосов
/ 15 декабря 2011

Hibernate может иногда генерировать обновления под вас!

Это происходит, например, если состояние объекта не синхронизировано с базой данных.Вы можете переопределить это поведение (см. 2-й пункт ниже) по мере необходимости ... Но часто это может привести к ошибкам в логике вашего приложения.

В вашем случае: это может происходить по двум причинам:

1) Hibernate анализирует публичные методы (например, методы получения и установки) для установки полей в вашемфайл отображения, основанный на HQL, который вы отправляете в качестве входных данных.Итак ... как это повлияет на вашу проблему?Хорошо ... если в ваших геттерах есть какая-то изощренная логика для ваших Java-бинов, эта логика может вызывать гибернацию для генерации некоторых обновлений, когда вы в конечном итоге делаете этот вызов, поскольку эти методы вызываются.

2) В некоторых известных случаях Hibernate выполняет обновления при вызове операторов выбора (т. Е. Грязных транзакций ).Иногда это можно исправить, установив «update = false» в ваших файлах .hbm.xml в соответствующих местах ...

См. Также: Использование Enum в Hibernate вызывает выбор, за которым следует оператор обновления

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