JPA Uppercase table names
hibernate, jpa, postgresql, spring-boot
Solution
maybe because you are using MYSQL5DIALECT there's a Postgres Dialect just used post it like this and for the improved naming strategy use EJB3 like Spring boot JPA insert in TABLE with uppercase name with Hibernate
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
hope it works for you
Problem
I have a table in Postgresql: ``` CREATE TABLE "UTILISATEUR"( "IdUtilisateur" serial NOT NULL, "Nom" character varying(50), "Prenom" character varying(50), "Profil" character varying(50), "Pseudo" character varying(20), "IdSite" integer DEFAULT 0, "Password" character varying(1024), id_role integer, ) ``` and I am trying Map on this Table So I used `@Table` JPA annotation (see below). This is my `application.propreties`: ``` spring.datasource.url = jdbc:postgresql://localhost/baseecu spring.datasource.username = postgres spring.datasource.password =root spring.datasource.driverClassName=org.postgresql.Driver spring.jpa.database = MYSQL spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect ``` and finaly this is my entity class: ``` @Entity @Table(name="UTILISATEUR") public class Utilisateur { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="IdUtilisateur") public Long id ; public String Nom ; public String Prenom ; public String Profil ; public String Pseudo ; public String Password ; @ManyToOne @JoinColumn(name="id_role") public Role role ; public Long getId() { return id; ``` If I have it like this `@Table(name="UTILISATEUR")` I get msg from PostgreSQL ``` ERREUR: la relation « utilisateur » n'existe pas ``` When I try to escape quote `@Table(name="\"UTILISATEUR\"")` ``` ERROR: syntax error at or near "`" ``` I tried the responses from this question but it doesn't work Spring boot JPA insert in TABLE with uppercase name with Hibernate update I've been searching about ImprovedNamingstrategy it's seems like an issue in spring boot instead I've used EJB3NamingStrategy and also DefaultNamingStrategy it's not working what funny it's when Hibernate execute the SQL the result is pretty confusing : ``` Hibernate: select utilisateu0_.IdUtilisateur as IdUtilis1_2_, utilisateu0_.Nom as Nom2_2_, utilisateu0_.Password as Password3_2_, utilisateu0_.Prenom as Prenom4_2_, utilisateu0_.Profil as Profil5_2_, utilisateu0_.Pseudo as Pseudo6_2_, utilisateu0_.id_role as id_role7_2_ from UTILISATEUR utilisateu0_ ``` It's like it knows the table name is in UPPERCASE but does not want to map or I don't know what wrong with it this is the result of using ``` spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.DefaultNamingStrategy or spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.DefaultNamingStrategy ``` and also the EJB3NamingStrategy This is also the result when I use the annotation like that ``` @Table(name="UTILISATEUR") ``` and I also tried like that ``` @Table(name="\"UTILISATEUR\"") ``` and I get the issue ``` ERROR: syntax error at or near "`" Hibernate: select utilisateu0_.IdUtilisateur as IdUtilis1_2_, utilisateu0_.Nom as Nom2_2_, utilisateu0_.Password as Password3_2_, utilisateu0_.Prenom as Prenom4_2_, utilisateu0_.Profil as Profil5_2_, utilisateu0_.Pseudo as Pseudo6_2_, utilisateu0_.id_role as id_role7_2_ from `UTILISATEUR` utilisateu0_ ``` finally this is my `pom.xml` ``` <?xml version="1.0" encoding="UTF-8"?> <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>com.xx.MDValidation</groupId> <artifactId>xx.MDValidation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>xx.MDValidation</name> <description>Projet Validation xx</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.2.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <hibernate.version>4.2.21.Final</hibernate.version> <commons-dbcp.version>1.2.2</commons-dbcp.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901.jdbc4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> </dependency> <dependency> <groupId>bsf</groupId> <artifactId>bsf</artifactId> <version>2.4.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ```