Документация Разработчика Hibernate — Глава I. Доступ К Базе Данных

Представляю вашему вниманию перевод первая глава официальной документации Hibernate .

Перевод статьи актуален для версии Hibernate 4.2.19.Final Следующая глава - Документация разработчика Hibernate — Глава II. Транзакции и управление потоками Содержание &nbsp Предисловие &nbsp 1. Доступ к базе данных &nbsp&nbsp 1.1. Связь &nbsp&nbsp&nbsp 1.1.1. Конфигурация &nbsp&nbsp&nbsp 1.1.2. Получение соединения JDBC &nbsp&nbsp 1.2. Пул соединений &nbsp&nbsp&nbsp 1.2.1. Объединение с c3p0 &nbsp&nbsp&nbsp 1.2.2. Объединение с Proxool &nbsp&nbsp&nbsp 1.2.3. Получение соединений от сервера приложений через JNDI &nbsp&nbsp&nbsp 1.2.4. Другая конфигурация подключения &nbsp&nbsp&nbsp 1.2.5. Дополнительные свойства конфигурации &nbsp&nbsp 1.3. Диалекты &nbsp&nbsp&nbsp 1.3.1. Указание используемого диалекта &nbsp&nbsp&nbsp 1.3.2. Разрешение диалекта &nbsp&nbsp 1.4. Автоматическое создание схемы с помощью экспорта схемы &nbsp&nbsp&nbsp 1.4.1. Настройка файлов сопоставления &nbsp&nbsp&nbsp 1.4.2. Запуск инструмента SchemaExport



Предисловие

Работа как с объектно-ориентированным программным обеспечением, так и с реляционными базами данных может быть очень трудоемкой и трудоемкой.

Затраты на разработку значительно выше из-за несоответствия парадигм представления данных в объектах и реляционных базах данных.

Hibernate — это решение т. н.

объектно-реляционная проекция для Java. Термин объектно-реляционная проекция относится к методу отображения данных из модели представления объекта в модель реляционного представления (и наоборот).

См.

en.wikipedia.org/wiki/Object-relational_mapping Больше подробностей.

Важный Хотя вам не обязательно владеть SQL, чтобы использовать Hibernate, понимание основных концепций будет иметь большое значение для быстрого освоения Hibernate. Лучший способ начать — понять принципы моделирования данных.

Информация по следующим ссылкам может быть полезна www.agiledata.org/essays/dataModeling101.html en.wikipedia.org/wiki/Data_modeling Hibernate не только заботится о сопоставлении классов Java с таблицами базы данных (а также о сопоставлении базовых типов Java с типами SQL), но также предоставляет механизмы для запроса и получения данных.

Это позволяет значительно сократить время разработки, которая в старом стиле выполнялась путем ручного манипулирования данными с помощью SQL и JDBC. Основная цель архитектурного проектирования Hibernate — избавить разработчика от повседневных задач по работе с данными базы данных, исключив необходимость написания собственной логики работы с данными посредством SQL и JDBC. Однако, в отличие от других решений по сохранению данных, Hibernate не скрывает от вас возможности SQL и гарантирует, что ваши инвестиции в реляционные технологии и знания по-прежнему действительны.

Hibernate, возможно, не лучшее решение для приложений, которые хранят всю свою бизнес-логику в хранимых процедурах, но он больше подходит для объектно-ориентированных моделей и логики на среднем (бизнес) уровне приложения, написанного на Java. Однако Hibernate, безусловно, может помочь вам устранить или инкапсулировать логику конкретного кода SQL, а также справиться с повседневными задачами по переводу результатов ваших запросов из табличного представления в граф объектов.



1. Доступ к базе данных



1.1. Связь

Hibernate подключается к базе данных от имени вашего приложения.

Соединение может осуществляться посредством различных типов механизмов, а именно: Встроенный пул соединений javax.sql.Источник данных В пулах соединений вы также можете использовать сторонние решения для создания пулов с открытым исходным кодом: c3p0 проксол Соединения JDBC, созданные приложением.

Это не рекомендуемый подход, и единственная причина его использования — работа с устаревшей средой.

Важный Встроенный пул соединений не предназначен для работы в «боевой» среде.

Hibernate получает соединения JDBC по мере необходимости через интерфейс.

org.hibernate.service.jdbc.connections.spi.ConnectionProvider .

Приложения также могут предоставлять свои собственные реализации интерфейса.

org.hibernate.service.jdbc.connections.spi.ConnectionProvider определить индивидуальный подход к обеспечению подключений к Hibernate. (Например, из другого пула соединений)

1.1.1. Конфигурация

Соединение с базой данных можно настроить с помощью файла свойств, дескриптора развертывания XML или программно.

Пример 1.1. hibernate.properties для пула соединений c3p0

  
  
  
  
  
  
  
  
  
   

hibernate.connection.driver_class = org.postgresql.Driver hibernate.connection.url = jdbc:postgresql://localhost/mydatabase hibernate.connection.username = myuser hibernate.connection.password = secret hibernate.c3p0.min_size=5 hibernate.c3p0.max_size=20 hibernate.c3p0.timeout=1800 hibernate.c3p0.max_statements=50 hibernate.dialect = org.hibernate.dialect.PostgreSQL82Dialect

Пример 1.2. hibernate.cfg.xml для подключения к встроенной базе данных HSQL.

<Эxml version='1.0' encoding='utf-8'?> <hibernate-configuration xmlns=" http://www.hibernate.org/xsd/hibernate-configuration " xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-configuration hibernate-configuration-4.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url"> jdbc:hsqldb:hsql://localhost </property> <property name="connection.username">sa</property> <property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/> </session-factory> </hibernate-configuration>



1.1.1.1. Конфигурация программного обеспечения

? экземпляр объекта org.hibernate.cfg.Configuration представляет собой полный набор типов сопоставлений с базой данных.

Объект org.hibernate.cfg.Configuration создает неизменяемый объект org.hibernate.SessionFactory и компилирует сопоставления из различных файлов XML. Вы можете указать файлы для сопоставления напрямую, или Hibernate сможет найти их за вас.

Пример 1.3. Указание файлов для непосредственного сопоставления Вы можете получить объект org.hibernate.cfg.Configuration создав его и указав XML-документы для непосредственного сопоставления.

Если файлы, которые нужно сопоставить, находятся в пути к классам, используйте метод addResource().



Configuration cfg = new Configuration() .

addResource("Item.hbm.xml") .

addResource("Bid.hbm.xml");

Пример 1.4. Hibernate найдет файлы за вас Метод addClass() сообщает Hibernate искать файлы сопоставления через путь к классам на основе имени класса, устраняя необходимость самостоятельно указывать имена файлов.

В следующем примере он ищет org/hibernate/аукцион/Item.hbm.xml И org/hibernate/auction/Bid.hbm.xml .



Configuration cfg = new Configuration() .

addClass(org.hibernate.auction.Item.class) .

addClass(org.hibernate.auction.Bid.class);

Пример 1.5. Указание свойств конфигурации

Configuration cfg = new Configuration() .

addClass(org.hibernate.auction.Item.class) .

addClass(org.hibernate.auction.Bid.class) .

setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect") .

setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test") .

setProperty("hibernate.order_updates", "true");

Другие способы программной настройки Hibernate
Перенос экземпляра java.util.Свойства в Configuration.setProperties().

Установка системного свойства с помощью java -Dproperty=value

1.1.2. Получение соединения JDBC

После настройки Основные свойства JDBC Hibernate , вы можете использовать метод openSession сорт org.hibernate.SessionFactory открывать сессии.

Сеансы будут открывать соединения JDBC по требованию на основе предоставленной конфигурации.

Пример 1.6. Открытие сессии

Session session = sessions.openSession();

Основные свойства JDBC Hibernate
hibernate.connection.driver_class hibernate.connection.url hibernate.connection.имя пользователя спящий режим.

соединение.

пароль hibernate.connection.pool_size

1.2. Пул соединений

Алгоритм формирования пула внутренних соединений в Hibernate довольно элементарный и необходим в основном для разработки и тестирования.

Используйте сторонние (3 р-д party) пулы для повышения производительности и стабильности.

Для использования 3 р-д партийный пул, заменить стоимость недвижимости hibernate.connection.pool_size в соответствии со спецификой выбранного вами пула.

Это отключит использование встроенного пула Hibernate.

1.2.1. Объединение с c3p0

C3P0 — это пул соединений JDBC с открытым исходным кодом, распространяемый вместе с Hibernate в каталоге lib/.

Hibernate будет использовать свой собственный org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider для пула соединений при настройке свойств hibernate.c3p0.* Важные свойства конфигурации для c3p0 hibernate.c3p0.min_size hibernate.c3p0.max_size hibernate.c3p0.timeout hibernate.c3p0.max_statements

1.2.2. Объединение с Proxool

Proxool — еще один пул с открытым исходным кодом, распространяемый вместе с Hibernate в каталоге lib/.

Hibernate будет использовать свой собственный org.hibernate.service.jdbc.connections.internal.ProxoolConnectionProvider для пула соединений с соответствующей настройкой hibernate.proxool.*.

В отличие от c3p0, proxool требует некоторых дополнительных параметров конфигурации, которые описаны в документации, доступной на сайте.

proxool.sourceforge.net/configure.html .

Таблица 1.1. Важные свойства конфигурации для пула соединений Proxool Свойство Описание hibernate.proxool.xml Настройте провайдера Proxool, используя указанный XML-файл (.

xml добавляется автоматически) hibernate.proxool.properties Настройте провайдера Proxool, используя указанный файл свойств (.

properties добавляется автоматически) hibernate.proxool.existing_pool Настраивать ли провайдера Proxool из существующего пула hibernate.proxool.pool_alias Псевдоним пула Proxool. Необходимый.



1.2.3. Получение соединений от сервера приложений через JNDI

Чтобы использовать Hibernate внутри сервера приложений, настройте Hibernate для получения соединений от javax.sql.Источник данных зарегистрировался в JNDI, установив хотя бы одно из следующих свойств: Важные свойства источников данных JNDI hibernate.connection.datasource (необходимый) hibernate.jndi.url hibernate.jndi.class hibernate.connection.имя пользователя спящий режим.

соединение.

пароль Соединения JDBC, полученные из источника данных JNDI, автоматически участвуют в транзакциях, управляемых контейнером сервера приложений.



1.2.4. Другая конфигурация подключения

Вы можете передать произвольные свойства соединения, добавив к ним префикс спящий режим.

соединение .

Например, чтобы указать свойство charSet, используйте имя hibernate.connection.charSet .

Вы можете определить свою стратегию получения соединений JDBC, реализовав интерфейс org.hibernate.service.jdbc.connections.spi.ConnectionProvider и указать свою собственную реализацию с помощью свойства hibernate.connection.provider_class

1.2.5. Дополнительные свойства конфигурации

Помимо свойств, перечисленных выше, Hibernate включает в себя множество других опций.

Более подробный список см.

http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html_single/ .



1.3. Диалекты

Хотя SQL относительно стандартизирован, каждый поставщик баз данных использует свое подмножество поддерживаемых синтаксисов.

Для этого есть еще один термин — диалект. Hibernate поддерживает различные варианты диалекта в классе.

org.hibernate.dialect.Диалект и различные подклассы для каждого диалекта поставщика.

Таблица 1.2. Поддерживаемые диалекты СУБД

Документация разработчика Hibernate — Глава I. Доступ к базе данных



1.3.1. Указание используемого диалекта

Разработчик может вручную указать используемый диалект, указав в свойстве hibernate.диалект желаемое имя подкласса org.hibernate.dialect.Диалект .



1.3.2. Разрешение диалекта

Предполагая заранее, что org.hibernate.service.jdbc.connections.spi.ConnectionProvider настроен, Hibernate попытается автоматически определить диалект на основе java.sql.DatabaseMetaData полученный от объекта java.sql.Соединение , что, в свою очередь, происходит от org.hibernate.service.jdbc.connections.spi.ConnectionProvider .

Эта функциональность обеспечивается экземплярами org.hibernate.service.jdbc.dialect.spi.DialectResolver , зарегистрированный самой платформой.

Hibernate поставляется со стандартным набором распознавания.

Если вашему приложению требуются дополнительные возможности распознавания диалектов, вполне возможно зарегистрировать собственную реализацию.

org.hibernate.service.jdbc.dialect.spi.DialectResolver как показано ниже Зарегистрированные продажи org.hibernate.service.jdbc.dialect.spi.DialectResolver добавляются во внутренний список резолверов, чтобы иметь приоритет над ранее зарегистрированными резолверами, а также над стандартными.



1.4. Автоматическое создание схемы с помощью SchemaExport

SchemaExport — это утилита Hibernate, которая генерирует сценарии DDL из ваших файлов сопоставления.

Сгенерированная схема включает ограничения ссылочной целостности, первичные и внешние ключи для сущностей и таблиц коллекций.

Он также создает таблицы для последовательностей и генераторы прогнозируемых идентификаторов.

Важный Вы должны указать диалект SQL через свойство hibernate.диалект при использовании этой утилиты, поскольку сам DDL индивидуален для каждого поставщика.

Подробности смотрите в Раздел 1.3, «Диалекты» .

Прежде чем Hibernate сможет сгенерировать вашу схему, вы должны настроить файлы сопоставления.



1.4.1. Настройка файлов сопоставления

Hibernate предоставляет ряд элементов и атрибутов для ваших файлов сопоставления.

Они перечислены в Таблице 1.3 «Элементы и атрибуты, предоставляемые для настройки файлов сопоставления», а логический порядок настройки представлен в процедуре 1.1 «Настройка схемы».

Таблица 1.3. ?Элементы и атрибуты, предназначенные для настройки файлов сопоставления.

Имя Тип значения Описание длина число Длина столбца точность число Десятичная точность столбца шкала число Столбец десятичной шкалы не ноль правда или ложь Может ли столбец содержать нулевые значения? уникальный правда или ложь Столбец содержит только уникальные значения? индекс нить Имя многостолбцового индекса уникальный ключ нить Имя ограничения уникальности нескольких столбцов внешний ключ нить Имя ограничения внешнего ключа, созданного для ассоциаций.

Это относится к элементам &ltone-to-one&gt, &ltmany-to-one&gt, &ltkey&gt и &ltmany-to-many&gt. inverse="true" пропускаются SchemaExport. sql-тип нить Переопределяет тип столбца по умолчанию.

Это применимо только к элементу &ltcolumn&gt. по умолчанию нить Значение по умолчанию для столбца проверять нить Ограничения SQL (ограничение проверки SQL) либо для каждого столбца, либо для каждой таблицы.

Процедура 1.1. Настройка схемы 1. Настройка длины, точности и масштаба элементов отображения.

Многие элементы сопоставления определяют дополнительные атрибуты, такие как длина , точность , И шкала .



<property name="zip" length="5"/> <property name="balance" precision="12" scale="2"/>

2. Установка ненулевых, УНИКАЛЬНЫХ атрибутов уникального ключа.

не ноль И УНИКАЛЬНЫЙ атрибуты создают ограничения для столбцов таблицы.

Атрибут уникальный ключ группирует столбцы в одно ограничение уникальности.

Атрибут переопределяет имя любого созданного уникального ограничения.



<many-to-one name="bar" column="barId" not-null="true"/> <element column="serialNumber" type="long" not-null="true" unique="true"/> <many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/> <property name="employeeId" unique-key="OrgEmployee"/>

3. Установка атрибутов индекса и внешнего ключа.

Атрибут index указывает имя индекса, который необходимо создать с использованием проецируемого столбца или столбцов.

Вы можете сгруппировать несколько столбцов под одним индексом, указав одно и то же имя индекса в каждом столбце.

Атрибут внешнего ключа переопределяет имя любого сгенерированного ограничения внешнего ключа.



<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>

4. Установка дочерних элементов &ltcolumn&gt. Многие элементы отображения позволяют использовать дочерние элементы &ltcolumn&gt. Это может быть полезно для типов сопоставления, включающих несколько столбцов.



<property name="name" type="my.customtypes.Name"/>

Теги: #hibernate #java #orm #документация #java

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.