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