Перед тем, как соединяться из Hibernate с PostgreSQL, не забудьте создать пользователя, базу данных и предоставить пользователю права на неё:
1
2
3
4
|
CREATE ROLE test WITH PASSWORD 'test';
ALTER ROLE test WITH LOGIN;
CREATE DATABASE test OWNER test;
|
Команды выше создают пользователя test с паролем test, создают базу данных test и назначают пользователя владельцем базы. В условиях реального приложения разумеется следует выбрать пароль посложнее.
Использование PostgreSQL непосредственно с Hibernate
Перед тем, как использовать PostgreSQL, необходимо добавить его JDBC драйвер в зависимости maven:
1
2
3
4
5
6
7
8
9
10
11
|
<properties>
<postgresql.version>9.4.1212.jre7</postgresql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
|
С драйвером PostgreSQL в classpath можно настраивать Hibernate:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<hibernate-configuration>
<session-factory>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.url">jdbc:postgresql://127.0.0.1:5432/test</property>
<property name="hibernate.connection.username">test</property>
<property name="hibernate.connection.password">test</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<!-- Other configuration -->
</session-factory>
</hibernate-configuration>
|
JDBC url у PostgresSQL имеет следующий формат: jdbc:postgresql://хост:порт/имябазы, например jdbc:postgresql://127.0.0.1:5432/test. Имя пользователя и пароль передаются отдельными параметрами. Наконец, надо не забыть переключить диалект Hibernate на PostgresqlSQL, что делается в последней строке.
Hibernate, PostgreSQL и пул c3p0
Однако, одно соединение не очень удобно использовать в реальном приложении. Поэтому настроим пул c3p0 для совместного использования с Hibernate и PostgreSQL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<properties>
<hibernate.version>5.2.1.Final</hibernate.version>
<c3p0.version>0.9.5.2</c3p0.version>
</properties>
<dependencies>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
|
Для включения c3p0 достаточно передать по меньшей мере один параметр c3p0 в настройки Hibernate:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<hibernate-configuration>
<session-factory>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.url">jdbc:postgresql://127.0.0.1:5432/test</property>
<property name="hibernate.connection.username">test</property>
<property name="hibernate.connection.password">test</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<property name="hibernate.c3p0.min_size">5</property>
<!-- Other configuration -->
</session-factory>
</hibernate-configuration>
|
Остальные параметры остаются такими же, как и для PostgreSQL без c3p0.
Hibernate, PostgreSQL и пул HikariCP
К сожалению, в Hibernate нет настолько высококачественной поддержки HikariCP, аналогичной c3p0. Поэтому настройка HikariCP требует чуть чуть больше работы.
В первую очередь, конечно же, надо добавить ещё и артефакт HikariCP в зависимости (не забываем про PostgreSQL JDBC драйвер):
1
2
3
4
5
6
7
8
9
10
11
|
<properties>
<hikaricp.version>2.4.3</hikaricp.version>
</properties>
<dependencies>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>${hikaricp.version}</version>
</dependency>
</dependencies>
|
Потом необходимо изменить конфигурацию Hibernate для работы с HikariCP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<hibernate-configuration>
<session-factory>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider</property>
<property name="hibernate.hikari.dataSourceClassName">org.postgresql.ds.PGSimpleDataSource</property>
<property name="hibernate.hikari.dataSource.url">jdbc:postgresql://127.0.0.1:5432/test</property>
<property name="hibernate.hikari.username">test</property>
<property name="hibernate.hikari.password">test</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<!-- Other settings -->
</session-factory>
</hibernate-configuration>
|
Все настройки соединения с PostgreSQL переименовываются и к ним добавляется два дополнительных параметра. Вначале в Hibernate настраивается использование HikariCP, затем указывается какой класс использовать для соединения с PostgreSQL.