2012-01-27 30 views
5

Estoy usando Hibernate y tengo una clase persistente llamada "Usuario". Dado que esta es una palabra clave, he marcado el atributo @Entity con un nombre diferente (que he visto, por ejemplo, esta pregunta: Unable to use table named "user" in postgresql hibernate)ERROR: error de sintaxis en o cerca del "usuario"

Sin embargo, todavía se meten en problemas porque esta clase se extiende otra, y parece como Hibernate todavía está tratando de utilizar "usuario" como nombre de columna y conseguir en mal estado:

@Entity(name = "XonamiUser") 
public class User extends PropertyContainer { 
    ... 

y

@MappedSuperclass 
public abstract class PropertyContainer implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected long key; 
    /** tags */ 
    @ElementCollection 
    protected Set<String> tags; 

    @ElementCollection 
    protected Set<String> searchList; 
    ... 

Mis otras clases que se extienden PropertyContainer parecen funcionar bien.

¿Este es un error en Hibernate? ¿Hay alguna forma de evitar la refactorización? ¡Gracias!

Éstos son los errores que estoy viendo (ligeramente limpiado):

WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601 
ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into user_search_list (user, search_list) values ('1', 'bjorn') was aborted. Call getNextException to see the cause. 
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601 
ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: syntax error at or near "user" 
    Position: 31 
+0

@TJ, agregué los errores que me llevan a creer que todavía está usando el nombre de la columna. –

Respuesta

1

Al final, refactoreé el usuario de la clase a XonamiUser. Esto no era exactamente lo que quería, pero funcionó muy bien.

1

estoy un poco confundido ¿se refiere a una columna o tabla con el nombre del usuario ... Se puede utilizar el @Table - anotación para establecer el nombre de la tabla de la entidad JPA:

@Entity 
@Table(name = "XonamiUser") 
public class User extends PropertyContainer { 
+0

Me sale "Fallido: crear tabla user_search_list (usuario int8 not null, search_list varchar (255)) ... ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - ERROR: error de sintaxis en o cerca de" usuario " –

1

el Hibernate reference manual tiene un exemple muestra cómo se define el nombre de la tabla se utiliza para mantener los elementos de la colección. Y ocurre que se usa una entidad de usuario para hacerlo y para definir la columna como user_id en lugar de como usuario.

Esta asignación debe estar bien, para su caso:

@ElementCollection 
@CollectionTable(name = "user_search_list", 
       joinColumns = @JoinColumn(name = "user_id")) 
@Column(name = "search_list") 
protected Set<String> searchList; 
+0

Esto supone que el usuario es la única clase que subclasifica PropertyContainer, ¿no? –

+0

No. Hibernate nombra la columna de unión "usuario" porque se une a una entidad llamada "Usuario". –

+0

pero searchList pertenece a PropertyContainer, por lo que el Usuario y otras clases lo heredan Si le digo a hibernate que debería usar el nombre user_search_list, ¿no intentará usar ese nombre para todas las clases que heredan? –

30

user es una reserved keyword en PostgreSQL. Está permitido solo como quoted identifier.

Debe forzar a Hibernate a utilizar el "user" citado en este comando INSERTAR.

No soy experto en Hibernate pero quizás esto Hibernate saving User model to Postgres ayudará?

+0

sí, la pregunta a la que me he vinculado en mi publicación original indica el mismo punto. Este es el motivo. Utilicé la anotación @Entity (name = "XonamiUser") –

+0

Mi error era algo así como ERROR: error de sintaxis en o cerca. Hibernate sobrescribe el error real de Po stgresql por palabra reservada Me tomó un tiempo darme cuenta. –

+0

@BjornRoche Creo que la pregunta es similar a la de su pregunta ... ¿podrían ayudarme en esto ... http: // stackoverflow.com/questions/42224949/exception-org-postgresql-util-psqlexception-error-syntax-error-at-or-near-c? noredirect = 1 # comment71610583_42224949 – dhS

Cuestiones relacionadas