Если у меня есть экземпляр объекта персистентности, и я устанавливаю некоторые члены следующим образом:
MyThing thing = session.get(MyThing.class, id);
thing.setSomething(thing.getSomething());
session.update(thing);
Действительно ли это приведет к тому, что спящий режим выдаст команду обновления SQL для обновления записи? Или спящий режим достаточно умен, чтобы знать, что объект был обновлен, но значения на самом деле не изменились?
3 ответа
В общем, он не должен выдавать обновление, если значения свойств сравниваются одинаково. (В частности, сравните равные в соответствии с их реализацией типа --- которая обычно совпадает с их методом equals (Object)).
Nemo был прав, вы всегда должны знать, что выполняет 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)
... если вы не используете сеанс без сохранения состояния?)
Я считаю, что он будет достаточно умен, чтобы распознать, что объект не был изменен, и таким образом избежать обновления.
Чтобы узнать наверняка, нужно включить вывод SQL для Hibernate. Добавлять
<property name="hibernate.show_sql">true</property>
В раздел фабрики сеансов конфигурации hibernate в вашем hibernate.cfg.xml.
AFAIK, он не будет выполнять команду SQL.
Похожие вопросы
Новые вопросы
hibernate
Hibernate - это библиотека объектно-реляционного отображения (ORM) для языка Java, позволяющая разработчикам использовать модели доменов в стиле POJO в своих приложениях способами, выходящими далеко за пределы объектно-реляционного отображения.