Hibernate - пример атрибута динамического обновления
Что такое динамическое обновление
Атрибут dynamic-update сообщает Hibernate, включать ли неизмененные свойства в оператор SQL UPDATE.
Пример динамического обновления
1. динамическое обновление = ложь
Значение по умолчанию для dynamic-update - false, что означаетinclude unmodified properties в операторе обновления SQL Hibernate.
Например, получить объект и попытаться изменить его значение и обновить его.
Query q = session.createQuery("from StockTransaction where tranId = :tranId ");
q.setParameter("tranId", 11);
StockTransaction stockTran = (StockTransaction)q.list().get(0);
stockTran.setVolume(4000000L);
session.update(stockTran);
Hibernate сгенерирует следующий оператор SQL для обновления.
Hibernate:
update
example.stock_transaction
set
DATE=?,
PRICE_CHANGE=?,
PRICE_CLOSE=?,
PRICE_OPEN=?,
STOCK_ID=?,
VOLUME=?
where
TRAN_ID=?
Hibernate обновит все неизмененные столбцы.
2. динамическое обновление = верно
Если для параметра dynamic-insert установлено значение true, что означаетexclude unmodified properties в операторе обновления SQL Hibernate.
Например, получить объект и попытаться изменить его значение и обновить его снова.
Query q = session.createQuery("from StockTransaction where tranId = :tranId ");
q.setParameter("tranId", 11);
StockTransaction stockTran = (StockTransaction)q.list().get(0);
stockTran.setVolume(4000000L);
session.update(stockTran);
Hibernate сгенерирует другой оператор SQL для обновления.
Hibernate:
update
example.stock_transaction
set
VOLUME=?
where
TRAN_ID=?
Hibernate обновит только измененные столбцы.
Performance issue
В большой таблице с множеством столбцов (устаревшая конструкция) или содержащей большие объемы данных обновление некоторых немодифицированных столбцов совершенно не требуется и оказывает большое влияние на производительность системы.
Как это настроить
Вы можете настроить свойства «dynamic-update» через аннотацию или файл сопоставления XML.
1. аннотирование
@Entity
@Table(name = "stock_transaction", catalog = "example")
@org.hibernate.annotations.Entity(
dynamicUpdate = true
)
public class StockTransaction implements java.io.Serializable {
2. Сопоставление XML
Заключение
Эта небольшая настройка «dynamic-update» определенно повысит производительность вашей системы, и мы настоятельно рекомендуем это сделать.
Следовать за
1. Hibernate - примерdynamic-insert attribute