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