какие можно устанавливать параметры в 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?

какие можно устанавливать параметры в hbm2ddl. Смотреть фото какие можно устанавливать параметры в hbm2ddl. Смотреть картинку какие можно устанавливать параметры в hbm2ddl. Картинка про какие можно устанавливать параметры в hbm2ddl. Фото какие можно устанавливать параметры в hbm2ddl

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.

какие можно устанавливать параметры в hbm2ddl. Смотреть фото какие можно устанавливать параметры в hbm2ddl. Смотреть картинку какие можно устанавливать параметры в hbm2ddl. Картинка про какие можно устанавливать параметры в hbm2ddl. Фото какие можно устанавливать параметры в hbm2ddl

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.

какие можно устанавливать параметры в hbm2ddl. Смотреть фото какие можно устанавливать параметры в hbm2ddl. Смотреть картинку какие можно устанавливать параметры в hbm2ddl. Картинка про какие можно устанавливать параметры в hbm2ddl. Фото какие можно устанавливать параметры в 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_classJDBC driver class
hibernate.connection.urlJDBC 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.urlURL провайдера 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

hibernate.format_sqlФорматированный вывод SQL в лог и консоль.

значения: true | false

hibernate.default_schemaКвалифицировать имена неквалифицированных таблиц с данными схемы/табличного пространства в сгенерированном SQL.

hibernate.default_catalogОпределяет имена неквалифицированных таблиц с данным каталогом в сгенерированный SQL.

hibernate.session_factory_nameorg.hibernate.SessionFactory автоматически привязывается к этому имени в JNDI после его создания.

hibernate.max_fetch_depthУстанавливает максимальную «глубину» для outer join дерева выборки однотипных ассоциаций (один к одному, много-к-одному). 0 отключает outer join выборку.

значения: рекоменддуемые значения от 0 до 3

hibernate.default_batch_fetch_sizeУстанавливает размер по умолчанию для пакетной выборки Hibernate.

значения: dynamic-map | pojo

hibernate.order_updatesЗаставляет Hibernate упорядочивать обновления SQL по значению первичного ключа обновляемых элементов. Это приводит к меньшему количеству блокировок транзакций в высококонкурентных системах

значения: true | false

hibernate.generate_statisticsЕсли включено, Hibernate будет собирать статистику, полезную для настройки производительности.

значения: true | false

hibernate.use_identifier_rollbackЕсли включено, сгенерированные свойства идентификатора будут сброшены до значений по умолчанию, когда объекты будут удалены.

значения: 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

hibernate.jdbc.use_scrollable_resultsetПозволяет использовать JDBC2 прокручиваемые (scrollable) результаты (resultsets) с помощью Hibernate. Это свойство необходимо только при использовании пользовательских JDBC-соединений. В противном случае Hibernate использует метаданные соединения.

значения: true | false

hibernate.jdbc.use_streams_for_binaryИспользует потоки при записи/чтении для типов binary или serializable в/из JDBC. *свойство системного уровня*

значения: true | false

hibernate.jdbc.use_get_generated_keysПозволяет использовать JDBC3 PreparedStatement.getGeneratedKeys() для извлечения инициализированных ключей после вставки. Требуется драйвер JDBC3+ и JRE1.4+, установите значение false если у вашего драйвера проблемы с генераторами идентификаторов Hibernate. По умолчанию он пытается определить возможности драйвера, используя метаданные соединения.

значения: true | false

hibernate.connection.isolationУстанавливает уровень изоляции транзакции JDBC. Проверьте java.sql.Connection для значимых значений, но обратите внимание, что большинство баз данных не поддерживают все уровни изоляции, а некоторые определяют дополнительные, нестандартные уровени изоляции.

hibernate.connection.autocommitВключает автофиксирование (autocommit) для объединённых (pooled) соединений JDBC (Использовать не рекомендуется).

значения: true | false

значения: auto по умолчанию | on_close | after_transaction | after_statement

Таблица 3.5. Свойства кэша в Hibernate

hibernate.cache.use_minimal_putsОптимизирует работу кэша второго уровня для минимизации операций записи, за счет более частых чтений. Этот параметр наиболее полезен для кластеризованных кэшей, В Hibernate — по умолчанию включён для кластеризованных реализаций кэша.

значения: true | false

hibernate.cache.use_query_cacheВключает кэш запросов. Индивидуальные запросы по-прежнему должны быть установлены с возможностью кэширования.

значения: true | false

значения: true | false

hibernate.cache.region_prefixПрефикс используется для имен регистров второго уровня.

hibernate.cache.use_structured_entriesЗаставляет Hibernate хранить данные в кэше второго уровня в более удобном для пользователя формате.

значения: true | false

hibernate.cache.auto_evict_collection_cacheВключает автоматическое «вытеснение» кэша коллекции двунаправленной ассоциации, когда элемент в коллекции ManyToOne добавляется/обновляется/удаляется без надлежащего управления изменениями на стороне OneToMany.

значения: true | false

Таблица 3.6. Свойства транзакций в Hibernate

Имя свойстваНазначение
hibernate.transaction.factory_classИмя класса TransactionFactory для использования с Hibernate Transaction API (по умолчанию используется JDBCTransactionFactory ).
jta.UserTransactionИмя JNDI, используемое JTATransactionFactory для получения JTA UserTransaction с сервера приложений.

hibernate.transaction.flush_before_completionЕсли этот параметр включён, сессия будет автоматически очищаться во время фазы «До завершения транзакции». Предпочтительным является встроенное и автоматическое управление контекстом сессии. См. Параграф «2.2. Контекстные сессии».

значения: true | false

hibernate.transaction.auto_close_sessionЕсли этот параметр включён, сессия будет автоматически закрываться во время фазы «После завершения транзакции». Предпочтительным является встроенное и автоматическое управление контекстом сессии. См. Параграф «2.2. Контекстные сессии».

значения: true | false

Таблица 3.7. Прочие свойства

Имя свойстваНазначение
hibernate.current_session_context_classПоставьте индивидуальную стратегию для определения «текущей» сессии. См. Параграф «2.2. Контекстные сессии». для получения дополнительной информации о встроенных стратегиях.

значения: jta | thread | managed | custom.Class

hibernate.query.factory_classВыбирает реализацию парсера HQL.

пример: org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory или org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory

hibernate.query.substitutionsИспользуется для отображения из токенов в запросах Hibernate в SQL-токены (например, токены могут быть именами функций или букв). пример: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNChibernate.hbm2ddl.autoАвтоматически проверяет или экспортирует DDL схемы в базу данных когда SessionFactory создан. С помощью create-drop схема базы данных будет удалена когда SessionFactory будет закрыт явно.

значения: 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 laterorg.hibernate.dialect.CUBRIDDialect
DB2org.hibernate.dialect.DB2Dialect
DB2 AS/400org.hibernate.dialect.DB2400Dialect
DB2 OS390org.hibernate.dialect.DB2390Dialect
Firebirdorg.hibernate.dialect.FirebirdDialect
FrontBaseorg.hibernate.dialect.FrontbaseDialect
H2org.hibernate.dialect.H2Dialect
HyperSQL (HSQL)org.hibernate.dialect.HSQLDialect
Informixorg.hibernate.dialect.InformixDialect
Ingresorg.hibernate.dialect.IngresDialect
Ingres 9org.hibernate.dialect.Ingres9Dialect
Ingres 10org.hibernate.dialect.Ingres10Dialect
Interbaseorg.hibernate.dialect.InterbaseDialect
InterSystems Cache 2007.1org.hibernate.dialect.Cache71Dialect
JDataStoreorg.hibernate.dialect.JDataStoreDialect
Mckoi SQLorg.hibernate.dialect.MckoiDialect
Microsoft SQL Server 2000org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2005org.hibernate.dialect.SQLServer2005Dialect
Microsoft SQL Server 2008org.hibernate.dialect.SQLServer2008Dialect
Microsoft SQL Server 2012org.hibernate.dialect.SQLServer2012Dialect
Mimer SQLorg.hibernate.dialect.MimerSQLDialect
MySQLorg.hibernate.dialect.MySQLDialect
MySQL with InnoDBorg.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialect
MySQL5org.hibernate.dialect.MySQL5Dialect
MySQL5 with InnoDBorg.hibernate.dialect.MySQL5InnoDBDialect
Oracle 8iorg.hibernate.dialect.Oracle8iDialect
Oracle 9iorg.hibernate.dialect.Oracle9iDialect
Oracle 10g and laterorg.hibernate.dialect.Oracle10gDialect
Oracle TimesTenorg.hibernate.dialect.TimesTenDialect
Pointbaseorg.hibernate.dialect.PointbaseDialect
PostgreSQL 8.1org.hibernate.dialect.PostgreSQL81Dialect
PostgreSQL 8.2org.hibernate.dialect.PostgreSQL82Dialect
PostgreSQL 9 and laterorg.hibernate.dialect.PostgreSQL9Dialect
Progressorg.hibernate.dialect.ProgressDialect
SAP DBorg.hibernate.dialect.SAPDBDialect
SAP HANA (column store)org.hibernate.dialect.HANAColumnStoreDialect
SAP HANA (row store)org.hibernate.dialect.HANARowStoreDialect
Sybaseorg.hibernate.dialect.SybaseDialect
Sybase 11org.hibernate.dialect.Sybase11Dialect
Sybase ASE 15.5org.hibernate.dialect.SybaseASE15Dialect
Sybase ASE 15.7org.hibernate.dialect.SybaseASE157Dialect
Sybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialect
Teradataorg.hibernate.dialect.TeradataDialect
Unisys OS 2200 RDMSorg.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.JBossTransactionManagerLookupJBoss AS
org.hibernate.transaction.WeblogicTransactionManagerLookupWeblogic
org.hibernate.transaction.WebSphereTransactionManagerLookupWebSphere
org.hibernate.transaction.WebSphereExtendedJTATransactionLookupWebSphere 6
org.hibernate.transaction.OrionTransactionManagerLookupOrion
org.hibernate.transaction.ResinTransactionManagerLookupResin
org.hibernate.transaction.JOTMTransactionManagerLookupJOTM
org.hibernate.transaction.JOnASTransactionManagerLookupJOnAS
org.hibernate.transaction.JRun4TransactionManagerLookupJRun4
org.hibernate.transaction.BESTransactionManagerLookupBorland ES
org.hibernate.transaction.JBossTSStandaloneTransactionManagerLookupJBoss TS используется отдельно (вне JBoss AS и JNDI сред). Для работы с org.jboss.jbossts:jbossjta:4.11.0.Final

3.9.2. JNDI-связанный SessionFactory

Связанный с JNDI Hibernate SessionFactory может упростить функцию поиска фабрики и создать новые сессии ( Session ). Однако это не связано с источником данных ( Datasource ), связанным с JNDI; оба просто используют один и тот же реестр.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *