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