Будет ли Hibernate обновлять базу данных, когда постоянный экземпляр установлен, но не изменен? - PullRequest
1 голос
/ 20 мая 2009

Если у меня есть экземпляр объекта персистентности, и я устанавливаю некоторые члены следующим образом:

MyThing thing = session.get(MyThing.class, id);
thing.setSomething(thing.getSomething());
session.update(thing);

Действительно ли это приведет к тому, что hibernate выдаст команду обновления SQL для обновления записи? Или hibernate достаточно умен, чтобы знать, что объект был обновлен, но значения фактически не изменились?

Ответы [ 3 ]

2 голосов
/ 20 мая 2009

В общем случае обновление не должно производиться, если значения свойств совпадают. (В частности, сравнивайте равные в соответствии с их реализацией типа --- которая обычно совпадает с их методом equals (Object)).

Немо был прав, вы всегда должны знать, что выполняет SQL Hibernate. Хотя я рекомендую установить для регистратора org.hibernate.SQL (net.sf.hibernate.SQL для Hibernate 2) уровень DEBUG (в log4j) вместо использования свойства show_sql (которое всегда записывает в System.out или System.err iirc).

(хотя я думаю, что вы имели в виду session.flush(), а не session.update(thing) ... если вы не используете сеанс без сохранения состояния?)

1 голос
/ 20 мая 2009

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

Можно сказать наверняка, включив вывод SQL для Hibernate. Добавить

<property name="hibernate.show_sql">true</property>

В раздел фабрики сессий hibernate-configuration, в вашем hibernate.cfg.xml.

0 голосов
/ 20 мая 2009

AFAIK, он не будет выполнять команду SQL.

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