Автор оригинала: 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/”