В моей предыдущей статье я написал пример, показывающий, как настроить JPA для его запуска в среде Java SE. Я также показал пример файла persistence.xml, который выглядит ниже:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="jpa-example" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <!-- Configuring JDBC properties --> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa_example" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="my_root_password" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <!-- Hibernate properties --> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> <property name="hibernate.hbm2ddl.auto" value="validate" /> <!-- Configuring Connection Pool --> <property name="hibernate.c3p0.min_size" value="5" /> <property name="hibernate.c3p0.max_size" value="20" /> <property name="hibernate.c3p0.timeout" value="500" /> <property name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.idle_test_period" value="2000" /> </properties> </persistence-unit> </persistence>
Тем, кто только начинает работать с JPA, позвольте мне объяснить некоторые компоненты этой конфигурации.
Первый раздел используется для настройки соединения JDBC, которое будет использоваться поставщиком сохраняемости. Обычно в этом разделе мы указываем URL JDBC, имя пользователя базы данных, пароль и полное имя класса Driver. Во втором разделе настраиваются некоторые значения свойств для режима гибернации, и поясняется ниже —
- Свойство «hibernate.show_sql» указывает, будет ли hibernate печатать запросы в файле журнала (при условии, что вы правильно настроили log4j). Это особенно полезно, если вы хотите посмотреть, какие запросы выполняются для чтения / записи / удаления некоторых объектов. В производственной среде вы можете установить значение false, если хотите, чтобы запросы не регистрировались.
- Свойство «hibernate.format_sql» указывает, будут ли запросы отформатированы в более читаемую форму перед регистрацией.
- Свойство «hibernate.dialet» указывает, какой тип диалектов мы намерены использовать. Если вы не знаете, что они из себя представляют, прочитайте этот отличный ответ на StackOverflow.
- Свойство «hibernate.hbm2ddl.auto» очень интересное. Изменяя его значение, вы можете включить hibernate для создания / удаления ваших таблиц базы данных или проверки существующей схемы в соответствии с вашим отображением. Это также было очень хорошо объяснено в StackOverflow.
В последнем разделе настраивается пул соединений, который Hibernate будет использовать для базы данных. Обычно Hibernate предоставляет встроенный механизм пула соединений, который достаточно хорош для разработки и тестирования, но не подходит для производственной среды. Таким образом, чтобы получить оптимальное поведение пула соединений в производственной среде, вам нужно использовать что-то более зрелое. C3P0 — это популярная библиотека пула соединений промышленного уровня, которую очень легко использовать с Hibernate. Все, что вам нужно сделать, это просто указать значения свойств, такие как минимальное / максимальное количество соединений в пуле, значения времени ожидания и т. Д., А остальное позаботится о Hibernate.
Есть еще один важный момент, который я пропустил в прошлой статье. Для того чтобы объекты были найдены поставщиком постоянства в среде Java SE, они должны быть перечислены в файле persistence.xml следующим образом:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <class>fully.qualified.path.of.the.entity</class> <!-- rest of the contents --> </persistence-unit> </persistence>
Это гарантирует, что поставщик сущностей найдет ваши сущности и будет готов к сохранению. Однако hibernate автоматически сканирует пакеты для классов, помеченных аннотацией «Entity», и делает их постоянными, поэтому нам не пришлось об этом беспокоиться. Помните, что это также относится к случаю, когда вы используете JPA в среде Java EE (т. Е. Ваше приложение работает на полномасштабном сервере приложений). В этом случае сервер приложений сканирует приложение во время его развертывания и находит классы, помеченные как объекты. Если вы запускаете свое приложение в среде Java SE с помощью провайдера, который не имеет возможности автоматического сканирования этого типа, вам потребуется перечислить объекты в файле persistence.xml, как указано выше.
Вот и все для настройки JPA в среде Java SE. Надеемся, что после того, как вы настроите эту настройку, вы без труда сможете сохранить свои сущности.