JPA/Hibernate и PostgreSQL: примеры настройки

Перед тем, как соединяться из с , не забудьте создать пользователя, базу данных и предоставить пользователю права на неё:

Команды выше создают пользователя test с паролем test, создают базу данных test и назначают пользователя владельцем базы. В условиях реального приложения, разумеется, следует выбрать пароль посложнее.

Непосредственное соединение с PostgreSQL

Перед тем, как использовать PostgreSQL, необходимо добавить его JDBC драйвер в зависимости maven:

С драйвером PostgreSQL в classpath можно настраивать Hibernate как провайдер. Напоминаю, что все настройки находятся в файле META-INF/persistence.xml

JDBC url у PostgreSQL имеет следующий формат: jdbc:postgresql://хост:порт/имябазы, например jdbc:postgresql://127.0.0.1:5432/test. Имя пользователя и пароль передаются отдельными параметрами. Наконец, надо не забыть переключить диалект Hibernate на PostgreSQL, что делается в последней строке.

PostgreSQL и пул c3p0

Однако, как мы знаем, одно соединение не очень удобно использовать в реальном приложении. Поэтомунастроим пул c3p0 для совместного использования сJPA/Hibernate и PostgreSQL.

Для этого, кроме PostgreSQL JDBC драйвера,  надо добавить непосредственно c3p0 и библиотеку hibernate-cp30 к зависимостям maven:

Для включения c3p0 достаточно добавить по меньшей мере один параметр c3p0 к настройкам Hibernate:

Остальные параметры остаются такими же, как и для PostgreSQL без c3p0.

PostgreSQL и пул

К сожалению, в Hibernate нет настолько высококачественной поддержки HikariCP, аналогичной c3p0. Поэтому настройка HikariCP требует чуть чуть больше работы.

В первую очередь, конечно же, надо добавить ещё и артефакт HikariCP в зависимости (не забываем про PostgeSQL JDBC драйвер):

Потом необходимо изменить конфигурацию JPA/Hibernate для работы с HikariCP:

Все настройки соединения с PostgreSQL переименовываются и к ним добавляется два дополнительных параметра. Вначале в Hibernate настраивается использование HikariCP, затем указывается какой класс использовать для соединения с PostgreSQL.