@Column(name="open")
Usando dialecto sqlserver con hibernate.
[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 usara un identificador entre comillas al crear la tabla.
¿Alguna idea sobre cómo manejar esto ... además de cambiar el nombre del campo?
Respuestas:
Tuve el mismo problema, pero con un nombre de tabla llamado
Transaction
. Si poneshibernate.globally_quoted_identifiers=true
Entonces se citarán todos los identificadores de la base de datos.
Encontré mi respuesta aquí Carácter especial en el nombre de la tabla hibernación 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 se pudieron encontrar mejores documentos para esto.
En mi caso, la configuración estaba en mi archivo de propiedades de Spring. Como se menciona en los comentarios, también podría estar en otros archivos de configuración relacionados con la hibernación.
fuente
persistence.xml
proyectos de JBoss.Con Hibernate como proveedor de JPA 1.0, puede escapar de una palabra clave reservada encerrándola entre comillas invertidas:
@Column(name="`open`")
Esta es la sintaxis heredada de Hiberate Core:
En JPA 2.0, la sintaxis está estandarizada y se convierte en:
@Column(name="\"open\"")
Referencias
Preguntas relacionadas
fuente
@Column(name="[open]")
es mucho más bonito :)Escapando manualmente de las palabras clave reservadas
Si está utilizando JPA, puede escapar con comillas dobles:
@Column(name = "\"open\"")
Si está utilizando la API nativa de Hibernate, puede escapar de ellos usando comillas invertidas:
@Column(name = "`open`")
Escapar automáticamente las palabras clave reservadas
Si desea escapar automáticamente de las palabras clave reservadas, puede establecer
true
lahibernate.globally_quoted_identifiers
propiedad de configuración específica de Hibernate :<property name="hibernate.globally_quoted_identifiers" value="true" />
Formato Yaml
spring: jpa: properties: hibernate: globally_quoted_identifiers: true
Para obtener más detalles, consulte este artículo .
fuente
Si usa como se muestra a continuación, debería funcionar
@Column(name="[order]") private int order;
fuente
@Column(name="\"open\"")
Esto funcionará con seguridad. El mismo problema sucedió conmigo, cuando estaba aprendiendo a hibernar.
fuente
No, cambie el nombre de la columna.
Esto es específico de la base de datos y simplemente no puede crear una columna de este tipo. 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 hibernar tampoco puede hacerlo. No creo que las citas resuelvan el problema incluso si estás 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.
fuente
Algunas implementaciones de JPA (por ejemplo, la que yo uso, DataNucleus) citan automáticamente el identificador por ti, por lo que nunca obtienes esto.
fuente