11. PostgreSQL 9.4
Ahora abordamos la adaptación a PostgreSQL 9.4 de lo que se ha hecho con Oracle.
![]() |
11.1. Configuración del entorno de trabajo
11.1.1. Entorno Eclipse
Trabajaremos con el siguiente entorno Eclipse:
![]() |
Los proyectos PostgreSQL mencionados anteriormente se encuentran en la carpeta [<exemples>/spring-database-config\postgresql\eclipse].
Nota: ejecute [Alt-F5] para regenerar todos los proyectos Maven.
11.1.2. Generación de las bases de datos
En lo sucesivo, la conexión a las bases de datos PostgresSQL se realiza con las credenciales [postgres / postgres]. Ejecute PostgreSQL y su cliente [PgManager] (véase el apartado 23.7).
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() | ![]() |
![]() |
- en [1], se cargará el script SQL [<exemples>\spring-database-config\postgresql\databases\dbproduits.sql] ;
![]() | ![]() |
![]() |
- en [2], al igual que en Oracle, las capas JPA utilizan secuencias para generar las claves primarias. Aquí, la secuencia [produits_sequence] genera las claves primarias de la tabla [produits];
Ahora, ejecute las configuraciones:
- [spring-jdbc-generic-01.IntroJdbc01];
- [spring-jdbc-generic-01.IntroJdbc02];
- [spring-jdbc-generic-03.JUnitTestDao1];
- [spring-jdbc-generic-03.JUnitTestDao2];
Todas deben completarse con éxito.
Ahora generemos la base [dbproduitscategories]. Repita para [dbproduitscategories] el procedimiento realizado para crear [dbproduits]. El script SQL que hay que cargar se encuentra en la ubicación [<exemples>\spring-database-config\postgresql\databases\ dbproduitscategories.sql] ;
![]() |
Ahora, ejecute las configuraciones:
- [spring-jdbc-generic-04.JUnitTestDao];
- [spring-jpa-generic-JUnitTestDao-openjpa];
Ambas deben completarse con éxito.
11.2. Configuración de la capa JDBC
![]() | ![]() |
El proyecto [postgresql-config-jdbc] configura la capa [JDBC] de la siguiente arquitectura de pruebas:
![]() |
El proyecto es análogo al proyecto de configuración [mysql-config-jdbc] de la capa JDBC del SGBD MySQL (véase el apartado 3.3). Solo presentamos las modificaciones:
El archivo [pom.xml] importa el controlador JDBC de PostgreSQL:
<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>
<!-- dependencias variables ********************************************** -->
<!-- controlador JDBC del SGBD -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<!-- dependencias constantes ********************************************** -->
...
</dependencies>
...
</project>
- líneas 18-22: el controlador JDBC de PostgreSQL;
La segunda modificación se encuentra en la clase [ConfigJdbc], que define los identificadores de acceso a las bases de datos:
// parámetros de conexión
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";
La tercera modificación que se puede realizar es la del número máximo de parámetros que un [PreparedStatement] puede admitir:
// número máximo de parámetros de un [PreparedStatement]
public final static int MAX_PREPAREDSTATEMENT_PARAMETERS = 10000;
La prueba [JUnitTestPushTheLimits] genera órdenes SQL sobre 5000 productos que generarán [PreparedStatement] con 5000 parámetros. MySQL había soportado este valor. PostgreSQL también.
La cuarta modificación es más sorprendente:
public final static String TAB_PRODUITS_ID = "id";
public final static String TAB_CATEGORIES_ID = "id";
Los nombres de las columnas [ID] de las tablas [CATEGORIES] y [PRODUITS] deben estar en minúsculas para el proyecto [spring-jdbc-04]. De lo contrario, se produce un fallo en las instrucciones que utilizan los dos beans siguientes de este proyecto:
// Inserción de producto
@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);
}
// inserción de categoría
@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. Configuración de la capa JPA OpenJpa
![]() | ![]() |
El proyecto [postgresql-config-jpa-openjpa] configura la capa [JPA] de la arquitectura de pruebas:
![]() |
El proyecto es análogo al proyecto de configuración [oracle-config-jpa-openjpa] de la capa JPA OpenJpa de Oracle SGBD (véase el apartado 10.5). De hecho, ambos SGBD utilizan secuencias para generar las claves primarias. Solo hay que realizar una modificación. Se encuentra en la definición del bean [jpaVendorAdapter] de la clase [ConfigJpa]:
// el proveedor JPA
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
OpenJpaVendorAdapter openJpaVendorAdapter = new OpenJpaVendorAdapter();
openJpaVendorAdapter.setShowSql(false);
openJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
openJpaVendorAdapter.setGenerateDdl(true);
return openJpaVendorAdapter;
}
- línea 6: se indica a la implementación JPA que va a trabajar con una base PostgreSQL. La implementación JPA adoptará entonces tanto los tipos de datos propietarios como el SQL propietario de este SGBD.
Una vez realizadas estas modificaciones, la ejecución de la configuración [spring-jpa-generic-JUnitTestDao-openjpa] debería completarse con éxito.
![]() | ![]() |
11.4. Configuración de la capa JPA de Hibernate
![]() | ![]() |
Nota: ejecute [Alt-F5] para regenerar todos los proyectos Maven.
El proyecto [postgresql-config-jpa-hibernate] es análogo al proyecto [oracle-config-jpa-hibernate] (apartado 10.4) con las mismas modificaciones que se aplicaron al portar el [oracle-config-jpa-openjpa] al proyecto [postgresql-config-jpa-openjpa] (apartado 11.3).
Una vez realizadas estas modificaciones, la ejecución de la configuración [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] debería completarse con éxito.
11.5. Configuración de la capa JPA EclipseLink
![]() | ![]() |
Nota: ejecute [Alt-F5] para regenerar todos los proyectos Maven.
El proyecto [postgresql-config-jpa-eclipselink] es análogo al proyecto [oracle-config-jpa-eclipselink] (apartado 10.3) con las mismas modificaciones que se aplicaron al portar el [oracle-config-jpa-openjpa] al proyecto [postgresql-config-jpa-openjpa] (apartado 11.3).
Una vez realizadas estas modificaciones, la ejecución de la configuración [spring-jpa-generic-JUnitTestDao-hibernate-eclipselink] debería completarse con éxito.



























