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

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

Что такое динамическая вставка

Атрибут dynamic-insert указывает Hibernate, включать ли нулевые свойства в оператор SQL INSERT. Давайте рассмотрим несколько примеров, чтобы понять более четко об этом.

Пример динамической вставки

1. динамическая вставка = ложь

Значение по умолчанию для dynamic-insert - false, что означаетinclude null properties в инструкции SQL INSERT Hibernate.

Например, попробуйте установить некоторые нулевые значения в свойствах объекта и сохраните его.

        StockTransaction stockTran = new StockTransaction();
        //stockTran.setPriceOpen(new Float("1.2"));
        //stockTran.setPriceClose(new Float("1.1"));
        //stockTran.setPriceChange(new Float("10.0"));
        stockTran.setVolume(2000000L);
        stockTran.setDate(new Date());
        stockTran.setStock(stock);

        session.save(stockTran);

Включите Hibernate «show_sql» в true, вы увидите следующую инструкцию вставки SQL.

Hibernate:
    insert
    into
        example.stock_transaction
        (DATE, PRICE_CHANGE, PRICE_CLOSE, PRICE_OPEN, STOCK_ID, VOLUME)
    values
        (?, ?, ?, ?, ?, ?)

Hibernate will generate the unnecessary columns (PRICE_CHANGE, PRICE_CLOSE, PRICE_OPEN) для вставки.

2. динамическая вставка = истина

Если для параметра dynamic-insert установлено значение true, что означаетexclude null property values в операторе INSERT SQL Hibernate.

Например, попробуйте установить некоторые нулевые значения в свойствах объекта и сохраните его снова.

        StockTransaction stockTran = new StockTransaction();
        //stockTran.setPriceOpen(new Float("1.2"));
        //stockTran.setPriceClose(new Float("1.1"));
        //stockTran.setPriceChange(new Float("10.0"));
        stockTran.setVolume(2000000L);
        stockTran.setDate(new Date());
        stockTran.setStock(stock);

        session.save(stockTran);

Включите Hibernate «show_sql» в true. Вы увидите другой оператор вставки SQL.

Hibernate:
    insert
    into
        example.stock_transaction
        (DATE, STOCK_ID, VOLUME)
    values
        (?, ?, ?)

Hibernate will generate only the necessary columns (DATE, STOCK_ID, VOLUME) для вставки.

Проблема производительности

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

Как это настроить

Вы можете настроить значение свойств динамической вставки с помощью аннотации или файла сопоставления XML.

1. аннотирование

@Entity
@Table(name = "stock_transaction", catalog = "example")
@org.hibernate.annotations.Entity(
        dynamicInsert = true
)
public class StockTransaction implements java.io.Serializable {

2. Сопоставление XML


        
            
            
        

Заключение

Эта небольшая настройка «dynamic-insert» может повысить производительность вашей системы, и настоятельно рекомендует это сделать. Тем не менее, у меня возникает вопрос: почему Hibernate по умолчанию имеет значение false?

Следовать за

1. Hibernate - примерdynamic-update attribute