@Column(name="open")
Usando o dialeto sqlserver com 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'.
Eu esperava que o hibernate usasse o identificador entre aspas ao criar a tabela.
Alguma ideia de como lidar com isso ... além de renomear o campo?
Respostas:
Tive o mesmo problema, mas com um nome de tabela chamado
Transaction
. Se você definirhibernate.globally_quoted_identifiers=true
Em seguida, todos os identificadores de banco de dados serão colocados entre aspas.
Encontrei minha resposta aqui Caractere especial no nome da tabela hibernação, dando erro
E encontrou todas as configurações disponíveis aqui https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html
Não foi possível encontrar documentos melhores para isso.
No meu caso, a configuração estava no meu arquivo de propriedades do Spring. Conforme mencionado nos comentários, ele também pode estar em outros arquivos de configuração relacionados ao hibernate.
fonte
persistence.xml
projetos do JBoss.Com o Hibernate como provedor JPA 1.0, você pode escapar de uma palavra-chave reservada colocando-a entre crases:
@Column(name="`open`")
Esta é a sintaxe herdada do Hiberate Core:
No JPA 2.0, a sintaxe é padronizada e se torna:
@Column(name="\"open\"")
Referências
Perguntas relacionadas
fonte
@Column(name="[open]")
é muito mais bonito :)Escape manual das palavras-chave reservadas
Se você estiver usando JPA, pode escapar com aspas duplas:
@Column(name = "\"open\"")
Se você estiver usando a API nativa do Hibernate, poderá escapar deles usando crases:
@Column(name = "`open`")
Escape automático de palavras-chave reservadas
Se você deseja escapar automaticamente das palavras-chave reservadas, pode definir a propriedade de configuração
true
específica do Hibernatehibernate.globally_quoted_identifiers
:<property name="hibernate.globally_quoted_identifiers" value="true" />
Formato Yaml
spring: jpa: properties: hibernate: globally_quoted_identifiers: true
Para mais detalhes, confira este artigo .
fonte
Se você usar como mostrado abaixo, deve funcionar
@Column(name="[order]") private int order;
fonte
@Column(name="\"open\"")
Isso vai funcionar com certeza, o mesmo problema aconteceu comigo, quando eu estava aprendendo a hibernar.
fonte
Não - altere o nome da coluna.
Isso é específico do banco de dados e você simplesmente não pode criar tal coluna. Afinal o hibernate finalmente envia DDL para o banco de dados. Se você não pode criar um DDL válido com este nome de coluna, isso significa que o hibernate também não pode. Não acho que citar resolveria o problema, mesmo se você estiver escrevendo o DDL.
Mesmo se você conseguir escapar do nome - mude-o. Ele funcionará com este banco de dados, mas não funcionará com outro.
fonte
Algumas implementações JPA (por exemplo, o que eu uso, DataNucleus) citam automaticamente o identificador para você, então você nunca terá isso.
fonte