11. PostgreSQL 9.4
Wir werden uns nun mit der Portierung der für Oracle durchgeführten Maßnahmen auf PostgreSQL 9.4 befassen.
![]() |
11.1. Einrichten der Arbeitsumgebung
11.1.1. Eclipse-Umgebung
Wir werden mit der folgenden Eclipse-Umgebung arbeiten:
![]() |
Die oben aufgeführten PostgreSQL-Projekte befinden sich im Ordner [<examples>/spring-database-config\postgresql\eclipse].
Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.
11.1.2. Erstellen der Datenbanken
Im weiteren Verlauf dieses Leitfadens werden Verbindungen zu PostgreSQL-Datenbanken unter Verwendung der Anmeldedaten [postgres / postgres] hergestellt. Starten Sie PostgreSQL und dessen Client [PgManager] (siehe Abschnitt 23.7).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() | ![]() |
![]() |
- Laden Sie in [1] das SQL-Skript [<examples>\spring-database-config\postgresql\databases\dbproduits.sql];
![]() | ![]() |
![]() |
- In [2] verwenden die JPA-Schichten, genau wie bei Oracle, Sequenzen zur Generierung von Primärschlüsseln. Hier generiert die Sequenz [products_sequence] die Primärschlüssel für die Tabelle [products];
Führen Sie nun die Konfigurationen aus:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Sie sollten alle erfolgreich sein.
Erstellen wir nun die Datenbank [dbproduitscategories]. Wiederholen Sie für [dbproduitscategories] den Vorgang, den Sie zum Erstellen von [dbproduits] verwendet haben. Das zu ladende SQL-Skript befindet sich unter [<examples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql] ;
![]() |
Führen Sie nun die Tests aus:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa];
Beide sollten erfolgreich sein.
11.2. Konfigurieren der JDBC-Schicht
![]() | ![]() |
Das Projekt [postgresql-config-jdbc] konfiguriert die [JDBC]-Schicht der folgenden Testarchitektur:
![]() |
Das Projekt entspricht dem Konfigurationsprojekt [mysql-config-jdbc] für die JDBC-Schicht des MySQL-DBMS (siehe Abschnitt 3.3). Wir stellen hier nur die Änderungen vor:
Die Datei [pom.xml] importiert den PostgreSQL-JDBC-Treiber:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dvp.spring.database</groupId>
<artifactId>generic-config-jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>configuration generic jdbc</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>
<dependencies>
<!-- dépendances variables ********************************************** -->
<!-- driver JDBC from SGBD -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<!-- dépendances constantes ********************************************** -->
...
</dependencies>
...
</project>
- Zeilen 18–22: der PostgreSQL-JDBC-Treiber;
Die zweite Änderung betrifft die Klasse [ConfigJdbc], die die Datenbank-Anmeldedaten definiert:
// paramètres de connexion
public final static String DRIVER_CLASSNAME = "org.postgresql.Driver";
public final static String URL_DBPRODUITS = "jdbc:postgresql:dbproduits";
public final static String USER_DBPRODUITS = "postgres";
public final static String PASSWD_DBPRODUITS = "postgres";
public final static String URL_DBPRODUITSCATEGORIES = "jdbc:postgresql:dbproduitscategories";
public final static String USER_DBPRODUITSCATEGORIES = "postgres";
public final static String PASSWD_DBPRODUITSCATEGORIES = "postgres";
Die dritte Änderung, die vorgenommen werden kann, betrifft die maximale Anzahl von Parametern, die ein [PreparedStatement] unterstützen kann:
// max number of parameters of a [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
Der Test [JUnitTestPushTheLimits] generiert SQL-Anweisungen für 5.000 Produkte, wodurch [PreparedStatement]-Objekte mit 5.000 Parametern erzeugt werden. MySQL unterstützte diesen Wert. PostgreSQL ebenfalls.
Die vierte Änderung ist überraschender:
public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";
Die Namen der [ID]-Spalten in den Tabellen [CATEGORIES] und [PRODUCTS] müssen im Projekt [spring-jdbc-04] in Kleinbuchstaben geschrieben sein. Andernfalls kommt es zu einem Absturz bei Anweisungen, die die folgenden beiden Beans aus diesem Projekt verwenden:
// product insertion
@Bean
public SimpleJdbcInsert simpleJdbcInsertProduit(DataSource dataSource) {
return new SimpleJdbcInsert(dataSource)
.withTableName(ConfigJdbc.TAB_PRODUITS)
.usingGeneratedKeyColumns(ConfigJdbc.TAB_PRODUITS_ID)
.usingColumns(ConfigJdbc.TAB_PRODUITS_NOM, ConfigJdbc.TAB_PRODUITS_PRIX, ConfigJdbc.TAB_PRODUITS_DESCRIPTION,
ConfigJdbc.TAB_PRODUITS_CATEGORIE_ID);
}
// insertion category
@Bean
public SimpleJdbcInsert simpleJdbcInsertCategorie(DataSource dataSource) {
return new SimpleJdbcInsert(dataSource).withTableName(ConfigJdbc.TAB_CATEGORIES)
.usingGeneratedKeyColumns(ConfigJdbc.TAB_CATEGORIES_ID)
.usingColumns(ConfigJdbc.TAB_CATEGORIES_NOM);
}
11.3. Konfiguration der OpenJPA-JPA-Schicht
![]() | ![]() |
Das Projekt [postgresql-config-jpa-openjpa] konfiguriert die [JPA]-Schicht der Testarchitektur:
![]() |
Das Projekt entspricht dem Konfigurationsprojekt [oracle-config-jpa-openjpa] für die OpenJpa-JPA-Schicht des Oracle-DBMS (siehe Abschnitt 10.5). Tatsächlich verwenden beide DBMS Sequenzen zur Generierung von Primärschlüsseln. Es ist nur eine Änderung vorzunehmen. Diese betrifft die Definition des Beans [jpaVendorAdapter] in der Klasse [ConfigJpa]:
// the provider JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- Zeile 6: Wir teilen der JPA-Implementierung mit, dass sie mit einer PostgreSQL-Datenbank arbeiten wird. Die JPA-Implementierung übernimmt dann die proprietären Datentypen und die SQL dieses DBMS.
Nach diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-openjpa] erfolgreich sein.
![]() | ![]() |
11.4. Konfiguration der Hibernate-JPA-Schicht
![]() | ![]() |
Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.
Das Projekt [postgresql-config-jpa-hibernate] entspricht dem Projekt [oracle-config-jpa-hibernate] (Abschnitt 10.4) und weist dieselben Änderungen auf, die zur Portierung des Projekts [oracle-config-jpa-openjpa] auf das Projekt [postgresql-config-jpa-openjpa] (Abschnitt 11.3) verwendet wurden.
Mit diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.
11.5. Konfigurieren der EclipseLink-JPA-Schicht
![]() | ![]() |
Hinweis: Drücken Sie [Alt-F5], um alle Maven-Projekte neu zu generieren.
Das Projekt [postgresql-config-jpa-eclipselink] entspricht dem Projekt [oracle-config-jpa-eclipselink] (Abschnitt 10.3) und weist dieselben Änderungen auf, die zur Portierung des Projekts [oracle-config-jpa-openjpa] auf das Projekt [postgresql-config-jpa-openjpa] (Abschnitt 11.3) verwendet wurden.
Mit diesen Änderungen sollte die Ausführung der Konfiguration [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] erfolgreich sein.



























