Рубрики
Без рубрики

Пример атрибута гибернации – динамической вставки

– Спящий режим – динамический – пример атрибута вставки

Автор оригинала: mkyong.

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

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

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

1.

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

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

        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);

Включите режим гибернации “show_sql” в значение true, вы увидите следующую инструкцию insert SQL.

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

Режим гибернации создаст ненужные столбцы (PRICE_CHANGE, PRICE_CLOSE, PRICE_OPEN) для вставки.

2.

Если для параметра dynamic-insert установлено значение true, это означает исключить значения свойств null в инструкции Hibernate SQL INSERT.

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

        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);

Включите режим гибернации “show_sql” в значение true. Вы увидите другую инструкцию SQL insert.

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

Режим гибернации будет генерировать только необходимые столбцы (ДАТА, ИДЕНТИФИКАТОР ЗАПАСА, ОБЪЕМ) для вставки.

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

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

Как его настроить

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

1. Аннотация

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

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


        
            
            
        

Вывод

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

Следовать за

1. Гибернация – атрибут динамического обновления пример

Оригинал: “https://mkyong.com/hibernate/hibernate-dynamic-insert-attribute-example/”