какие можно устанавливать параметры в hbm2ddl
What are the possible values of the Hibernate hbm2ddl.auto configuration and what do they do
I really want to know more about the update, export and the values that could be given to hibernate.hbm2ddl.auto
I need to know when to use the update and when not? And what is the alternative?
These are changes that could happen over DB:
In each case what is the best solution?
14 Answers 14
hibernate.hbm2ddl.auto Automatically validates or exports schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.
e.g. validate | update | create | create-drop
So the list of possible options are,
These options seem intended to be developers tools and not to facilitate any production level databases, you may want to have a look at the following question; Hibernate: hbm2ddl.auto=update in production?
There’s also the undocumented value of «none» to disable it entirely.
The configuration property is called hibernate.hbm2ddl.auto
In our development environment we set hibernate.hbm2ddl.auto=create-drop to drop and create a clean database each time we deploy, so that our database is in a known state.
In theory, you can set hibernate.hbm2ddl.auto=update to update your database with changes to your model, but I would not trust that on a production database. An earlier version of the documentation said that this was experimental, at least; I do not know the current status.
First, the possible values for the hbm2ddl configuration property are the following ones:
The hibernate.hbm2ddl.auto=»update» is convenient but less flexible if you plan on adding functions or executing some custom scripts.
So, The most flexible approach is to use Flyway.
However, even if you use Flyway, you can still generate the initial migration script using hbm2ddl.
I would use liquibase for updating your db. hibernate’s schema update feature is really only o.k. for a developer while they are developing new features. In a production situation, the db upgrade needs to be handled more carefully.
Although it is quite an old post but as i did some research on the topic so thought of sharing it.
hibernate.hbm2ddl.auto
As per the documentation it can have four valid values:
create | update | validate | create-drop
Following is the explanation of the behaviour shown by these value:
Following are the important points worth noting:
In case if i give any value to this property(say abc, instead of above four values discussed above) or it is just left blank. It shows following behaviour:
-If schema is not present in the DB:- It creates the schema
-If schema is present in the DB:- update the schema.
Глава 3. Конфигурирование
3.1. Программная конфигурация
Альтернативный способ — указать отображаемый класс и позволить Hibernate найти XML-файлы отображений:
Затем Hibernate будет искать файлы отображаемый с именами /org/hibernate/auction/Item.hbm.xml и /org/hibernate/auction/Bid.hbm.xml в classpath. Такой подход исключает любые жестко заданные имена файлов.
org.hibernate.cfg.Configuration также позволяет указать свойства конфигурации. Например:
Это не единственный способ передать свойства конфигурации в Hibernate. Некоторые альтернативные варианты включают:
в файл hibernate.cfg.xml (обсуждается ниже).
3.2. Получение SessionFactory
3.3. Соединения JDBC
Желательно, чтобы org.hibernate.SessionFactory создавал и объединял в пул JDBC-соединения для вас. Такой подход позволяет очень просто открыть org.hibernate.Session :
После запуска задачи, требующей доступа к базе данных, соединение JDBC будет получено из пула.
Таблица 3.1. Свойства Hibernate JDBC
Имя свойства | Назначение |
---|---|
hibernate.connection.driver_class | JDBC driver class |
hibernate.connection.url | JDBC URL |
hibernate.connection.username | имя пользователя JDBC |
hibernate.connection.password | пароль пользователя JDBC |
hibernate.connection.pool_size | максимальное число соединений в пуле |
Алгоритм объединения пула Hibernate довольно рудиментарный. Он призван помочь вам начать работу и не предназначен для использования в продакшене или даже для тестирования производительности. Вы должны использовать сторонний пул для обеспечения максимальной производительности и стабильности. Просто замените свойство hibernate.connection.pool_size с конкретными настройками пула соединений. Это отключит внутренний пул Hibernate. Например, вы можете использовать c3p0.
Ниже приведен пример файла hibernate.properties для c3p0:
Таблица 3.2. Свойства Hibernate Datasource
Имя свойства | Назначение |
---|---|
hibernate.connection.datasource | имя datasource JNDI |
hibernate.jndi.url | URL провайдера JNDI (необязательный) |
hibernate.jndi.class | Класс JNDI InitialContextFactory (необязательный) |
hibernate.connection.username | имя пользователя бд (необязательный) |
hibernate.connection.password | пароль пользователя бд (необязательный) |
Ниже приведен пример файла hibernate.properties для сервера приложений, предоставляемого источником данных JNDI:
Соединения JDBC, полученные из источника данных JNDI, будут автоматически участвовать в транзакциях, управляемых контейнером сервера приложений.
3.4. Необязательные свойства конфигурации
Существует ряд других свойств, которые управляют поведением Hibernate во время выполнения. Все они являются необязательными и имеют разумные значения по умолчанию.
Внимание
Таблица 3.3. Свойства конфигурации Hibernate
значения: true | false
значения: true | false
значения: рекоменддуемые значения от 0 до 3
значения: dynamic-map | pojo
значения: true | false
значения: true | false
значения: true | false
значения: true | false
значения: true | false
Заметка
Таблица 3.4. Свойства JDBC и соединений в Hibernate
Имя свойства | Назначение |
---|---|
hibernate.jdbc.fetch_size | Ненулевое значение определяет размер выборки JDBC (вызывает Statement.setFetchSize() ). |
hibernate.jdbc.batch_size | Ненулевое значение включает использование пакетного обновления JDBC2 в Hibernate. |
значения: рекоменддуемые значения между 5 и 30
значения: true | false
значения: true | false
значения: true | false
значения: true | false
значения: true | false
значения: auto по умолчанию | on_close | after_transaction | after_statement
Таблица 3.5. Свойства кэша в Hibernate
значения: true | false
значения: true | false
значения: true | false
значения: true | false
значения: true | false
Таблица 3.6. Свойства транзакций в Hibernate
Имя свойства | Назначение |
---|---|
hibernate.transaction.factory_class | Имя класса TransactionFactory для использования с Hibernate Transaction API (по умолчанию используется JDBCTransactionFactory ). |
значения: true | false
значения: true | false
Таблица 3.7. Прочие свойства
Имя свойства | Назначение |
---|---|
hibernate.current_session_context_class | Поставьте индивидуальную стратегию для определения «текущей» сессии. См. Параграф «2.2. Контекстные сессии». для получения дополнительной информации о встроенных стратегиях. |
значения: jta | thread | managed | custom.Class
пример: org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory или org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory
значения: validate | update | create | create-drop
значения: true | false
На данный момент javassist является единственным поддерживаемым провайдером байт-кода.
3.4.1. Диалекты SQL
Всегда устанавливайте свойство hibernate.dialect в соответствующий подкласс org.hibernate.dialect.Dialect для вашей базы данных. Если вы укажете диалект Hibernate будет использовать разумные значения по умолчанию для некоторых других свойств, перечисленных выше. Это означает, что вам не нужно будет указывать их вручную.
Таблица 3.8. Hibernate SQL диалекты ( hibernate.dialect )
RDBMS | Диалект |
---|---|
CUBRID 8.3 and later | org.hibernate.dialect.CUBRIDDialect |
DB2 | org.hibernate.dialect.DB2Dialect |
DB2 AS/400 | org.hibernate.dialect.DB2400Dialect |
DB2 OS390 | org.hibernate.dialect.DB2390Dialect |
Firebird | org.hibernate.dialect.FirebirdDialect |
FrontBase | org.hibernate.dialect.FrontbaseDialect |
H2 | org.hibernate.dialect.H2Dialect |
HyperSQL (HSQL) | org.hibernate.dialect.HSQLDialect |
Informix | org.hibernate.dialect.InformixDialect |
Ingres | org.hibernate.dialect.IngresDialect |
Ingres 9 | org.hibernate.dialect.Ingres9Dialect |
Ingres 10 | org.hibernate.dialect.Ingres10Dialect |
Interbase | org.hibernate.dialect.InterbaseDialect |
InterSystems Cache 2007.1 | org.hibernate.dialect.Cache71Dialect |
JDataStore | org.hibernate.dialect.JDataStoreDialect |
Mckoi SQL | org.hibernate.dialect.MckoiDialect |
Microsoft SQL Server 2000 | org.hibernate.dialect.SQLServerDialect |
Microsoft SQL Server 2005 | org.hibernate.dialect.SQLServer2005Dialect |
Microsoft SQL Server 2008 | org.hibernate.dialect.SQLServer2008Dialect |
Microsoft SQL Server 2012 | org.hibernate.dialect.SQLServer2012Dialect |
Mimer SQL | org.hibernate.dialect.MimerSQLDialect |
MySQL | org.hibernate.dialect.MySQLDialect |
MySQL with InnoDB | org.hibernate.dialect.MySQLInnoDBDialect |
MySQL with MyISAM | org.hibernate.dialect.MySQLMyISAMDialect |
MySQL5 | org.hibernate.dialect.MySQL5Dialect |
MySQL5 with InnoDB | org.hibernate.dialect.MySQL5InnoDBDialect |
Oracle 8i | org.hibernate.dialect.Oracle8iDialect |
Oracle 9i | org.hibernate.dialect.Oracle9iDialect |
Oracle 10g and later | org.hibernate.dialect.Oracle10gDialect |
Oracle TimesTen | org.hibernate.dialect.TimesTenDialect |
Pointbase | org.hibernate.dialect.PointbaseDialect |
PostgreSQL 8.1 | org.hibernate.dialect.PostgreSQL81Dialect |
PostgreSQL 8.2 | org.hibernate.dialect.PostgreSQL82Dialect |
PostgreSQL 9 and later | org.hibernate.dialect.PostgreSQL9Dialect |
Progress | org.hibernate.dialect.ProgressDialect |
SAP DB | org.hibernate.dialect.SAPDBDialect |
SAP HANA (column store) | org.hibernate.dialect.HANAColumnStoreDialect |
SAP HANA (row store) | org.hibernate.dialect.HANARowStoreDialect |
Sybase | org.hibernate.dialect.SybaseDialect |
Sybase 11 | org.hibernate.dialect.Sybase11Dialect |
Sybase ASE 15.5 | org.hibernate.dialect.SybaseASE15Dialect |
Sybase ASE 15.7 | org.hibernate.dialect.SybaseASE157Dialect |
Sybase Anywhere | org.hibernate.dialect.SybaseAnywhereDialect |
Teradata | org.hibernate.dialect.TeradataDialect |
Unisys OS 2200 RDMS | org.hibernate.dialect.RDMSOS2200Dialect |
3.4.2. Outer Join Fetching
Дополнительную информацию см. в разделе 20.1 «Стратегии выборки».
3.4.3. Двоичные потоки (binary streams)
3.4.4. Кэш второго уровня и кэш запросов
Свойства с префиксом hibernate.cache позволяют использовать систему кэширования второго уровня с областью видимости процесса или кластера. Дополнительную информацию см. в разделе 20.2 «Кэш второго уровня».
3.4.5. Замена языка запроса
Это приведет к тому, что токены true и false будут переведены в целочисленные (integer) литералы в сгенерированном SQL.
3.4.6. Статистика Hibernate
3.5. Логирование
Важно
Полностью устарело. Hibernate использует JBoss Logging, начиная с 4.0. Документация появится как только мы перенесём этот контент в Руководство разработчика.
Рекомендуется ознакомиться с сообщениями журнала Hibernate. Было сделано много работы, чтобы сделать журнал Hibernate максимально подробным, не делая его нечитаемым. Наиболее интересными категориями журналов являются:
Таблица 3.9. Категории лога Hibernate
Категория | Функция |
---|---|
org.hibernate.SQL | Записывать все инструкции SQL DML во время их выполнения |
org.hibernate.type | Записывать все JDBC параметры |
org.hibernate.tool.hbm2ddl | Записывать все инструкции SQL DDL во время их выполнения |
org.hibernate.pretty | Записывать состояние всех сущностей (не более 20 сущностей), связанных с session во время очистки (flush) |
org.hibernate.cache | Записывать всю активность кэша второго уровня |
org.hibernate.transaction | Записывать всю активность, связанную с транзакциями |
org.hibernate.jdbc | Записывать все ресурсы JDBC |
org.hibernate.hql.internal.ast.AST | Записывать все HQL и SQL AST во вермя парсинга запросов |
org.hibernate.secure | Записывать все запросы авторизации JAAS |
org.hibernate | Записывать всё. Это огромное количество имформации, но полезно для поиска и устранения проблем |
3.6. Имплементация NamingStrategy
Интерфейс org.hibernate.cfg.NamingStrategy позволяет указать «стандарт именования» для объектов базы данных и элементов схемы.
Вы можете предоставить правила для автоматического создания идентификаторов базы данных из идентификаторов Java или для обработки «логических» столбцов и имен таблиц, указанных в файле отображения, в «физические» имена таблиц и столбцов. Эта функция помогает уменьшить многословие файла отображения, устраняя повторяющийся куски (например, префиксы TBL_). Стратегия по умолчанию, используемая Hibernate, минимальна.
Вы можете указать другую стратегию, вызвав Configuration.setNamingStrategy() перед добавлением отображений:
org.hibernate.cfg.ImprovedNamingStrategy — это встроенная стратегия, которая может быть полезной отправной точкой для некоторых приложений.
3.7. Имплементация PersisterClassProvider
Вы можете настроить реализацию persister, используемую для сохранения ваших сущностей и коллекций:
Каждый последующий элемент в списке выше по приоритету.
Методы провайдера класса persister при возврате непустого класса persister переопределяют константы Hibernate по умолчанию. Имя сущности или роль коллекции передаются методам. Это хороший способ централизовать основную логику persist-приложений вместо того, чтобы распространять их на каждом отображении сущности или коллекции.
3.8. XML-файл конфигурации
Файл конфигурации XML по умолчанию должен находиться в корне вашего CLASSPATH. Вот пример:
С конфигурацией XML запуск Hibernate прост:
Вы можете выбрать другой файл конфигурации XML, используя:
3.9. Интеграция на сервер приложений Java EE
Hibernate имеет следующие точки интеграции для инфраструктуры J2EE:
3.9.1. Конфигурация стратегии транзакций
Существуют три стандартных или встроенных варианта:
делегирует транзакции базе данных (JDBC) (по умолчанию)
делегирует транзакции, управляемые контейнером, если в этом контексте выполняется существующая транзакция (например, метод бина сессии (session) EJB). В противном случае запускается новая транзакция и используются транзакции, управляемые бином.
делегирует JTA транзакциям, управляемым контейнерами
Вы также можете определить свои собственные стратегии транзакций (например для сервиса транзакций CORBA).
Некоторые функции в Hibernate (кэш второго уровня, контекстные сессии с JTA и т. д.) требуют доступа к JTA TransactionManager в управляемой среде. На сервере приложений, поскольку J2EE не стандартизирует единый механизм, вы должны указать, как Hibernate должен получить ссылку на TransactionManager :
Таблица 3.10. JTA TransactionManagers
Фабрика транзакций | Сервер приложений |
---|---|
org.hibernate.transaction.JBossTransactionManagerLookup | JBoss AS |
org.hibernate.transaction.WeblogicTransactionManagerLookup | Weblogic |
org.hibernate.transaction.WebSphereTransactionManagerLookup | WebSphere |
org.hibernate.transaction.WebSphereExtendedJTATransactionLookup | WebSphere 6 |
org.hibernate.transaction.OrionTransactionManagerLookup | Orion |
org.hibernate.transaction.ResinTransactionManagerLookup | Resin |
org.hibernate.transaction.JOTMTransactionManagerLookup | JOTM |
org.hibernate.transaction.JOnASTransactionManagerLookup | JOnAS |
org.hibernate.transaction.JRun4TransactionManagerLookup | JRun4 |
org.hibernate.transaction.BESTransactionManagerLookup | Borland ES |
org.hibernate.transaction.JBossTSStandaloneTransactionManagerLookup | JBoss TS используется отдельно (вне JBoss AS и JNDI сред). Для работы с org.jboss.jbossts:jbossjta:4.11.0.Final |
3.9.2. JNDI-связанный SessionFactory
Связанный с JNDI Hibernate SessionFactory может упростить функцию поиска фабрики и создать новые сессии ( Session ). Однако это не связано с источником данных ( Datasource ), связанным с JNDI; оба просто используют один и тот же реестр.
- какие можно употреблять продукты при камнях в почках
- какие можно установить обои на телефон