usados terminos simbolos reservadas reservada pass para palabras palabra los lenguaje glosario definiciĆ³n declaracion comandos java sql-server hibernate orm jpa

java - terminos - Crear campo con nombre de palabra reservada con JPA



simbolos del lenguaje python (6)

@Column(name="open")

Usando el dialecto sqlserver con hibernación.

[SchemaUpdate] Unsuccessful: create table auth_session (id numeric(19,0) identity not null, active tinyint null, creation_date datetime not null, last_modified datetime not null, maxidle int null, maxlive int null, open tinyint null, sessionid varchar(255) not null, user_id numeric(19,0) not null, primary key (id), unique (sessionid)) [SchemaUpdate] Incorrect syntax near the keyword ''open''.

Hubiera esperado que hibernate utilizara el identificador entre comillas cuando creara la tabla.

¿Alguna idea sobre cómo manejar esto ... que no sea cambiar el nombre del campo?


Algunas implementaciones de JPA (por ejemplo, la que uso, DataNucleus) citan automáticamente el identificador por usted, por lo que nunca lo obtiene.


Con Hibernate como proveedor de JPA 1.0, puede escapar de una palabra clave reservada encerrándola en los marcadores:

@Column(name="`open`")

Esta es la sintaxis heredada de Hiberate Core:

5.4. Identificadores citados en SQL

Puede forzar a Hibernate a citar un identificador en el SQL generado al encerrar el nombre de la tabla o columna en los trazos en el documento de mapeo. Hibernate usará el estilo de cita correcto para el Dialecto SQL. Por lo general, se trata de comillas dobles, pero el servidor SQL usa corchetes y MySQL usa los palos.

<class name="LineItem" table="`Line Item`"> <id name="id" column="`Item Id`"/><generator class="assigned"/></id> <property name="itemNumber" column="`Item #`"/> ... </class>

En JPA 2.0, la sintaxis está estandarizada y se convierte en:

@Column(name="/"open/"")

Referencias

Preguntas relacionadas


No, cambie el nombre de la columna.

Esto es específico de la base de datos, y simplemente no puede crear dicha columna. Después de todo Hibernate finalmente envía DDL a la base de datos. Si no puede crear un DDL válido con este nombre de columna, esto significa que tampoco puede hibernar. No creo que las citas resuelvan el problema, incluso si está escribiendo el DDL.

Incluso si de alguna manera logras escapar del nombre, cámbialo. Funcionará con esta base de datos, pero no funcionará con otra.


Si usa como se muestra a continuación, debería funcionar

@Column(name="[order]") private int order;


Tenía el mismo problema, pero con un nombre de tabla llamado Transaction . Si configura

hibernate.globally_quoted_identifiers=true

Entonces todos los identificadores de bases de datos serán citados.

Encontré mi respuesta aquí Personaje especial en el nombre de la tabla hibernate dando error

Y encontró todas las configuraciones disponibles aquí https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html

Sin embargo, no pude encontrar mejores documentos para esto.


@Column(name="/"open/"")

Esto funcionará con seguridad. El mismo problema me sucedió cuando estaba aprendiendo a hibernar.