Cuando Hibernate ataca a Postgres…

Quizas este post te ayude si estas buscando una solucion para alguna de las siguientes cuestiones:

  • Pasarle comillas a la BBDD atraves de Hibernate
  • Usar palabras reservadas del gestor de BBDD como nombre de columna o tabla en JPA.
  • Tienes una org.postgresql.util.PSQLException
  • Tienes una excepcion: column notation applied to type name, which is not a composite type

Recientemente jugando con JPA contra Postgres nos hemos encontrado con un problema de los que le pueden volver loco a uno. La excepcion que teniamos era:



 org.postgresql.util.PSQLException: ERROR: .user_id column notation applied to type name, which is not a composite type

Es el tipo de mensaje de error que despista y te puede hacer dar vueltas durante horas (o dias) buscando el problema donde no es.
Nosotros estabamos convencidos de que habia algo erroneo en nuestras annotations de las columnas

@Column(name="user_id")

Pero lo que ya nos hacia tirarnos de los pelos era que nos pasaba lo mismo ya hiciesemos la query consultando user_id o email.



 org.postgresql.util.PSQLException: ERROR: .email column notation applied to type name, which is not a composite type

En general nos ocurria con cualesquiera columnas de nuestra tabla user.

Al final dimos con lo que estaba ocurriendo… el problema estaba en la annotation

@Table(name="user")

Os vais a reir… Resulta que user es una palabra reservada de Postgres, como tambien lo es id y algunas otras. Asi que si llamamos user a nuestra tabla, en la annotation necesitamos usar comillas para que el motor de BBDD no se haga un lio.

Y la forma de pasarle a Hibernate las comillas viene explicada aqui:
http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-quotedidentifiers

O sea, que usando la tilde invertida -`- Hibernate nos la traduce a las comillas adecuadas del dialecto adecuado.

Basicamente, nuestro problema se arreglo haciendo:

@Table(name="`user`")

Comentarios

  1. Si gracias, estoy empezando a usar Postgre y aun no me topaba con ese problema pero lo tengo exactamente asi.

  2. Muchas gracias, mi problema era parecido, el fallo venia de la select que hacia hibernate y que postgres no entendia,
    Ejemplo
    Select campo1,campo3 from tabla
    en ves de
    Select campo1,campo3 from “tabla”

Comments are closed.