Hibernate - пример атрибута динамического обновления

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