@Column(name="open")
Использование диалекта sqlserver с 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'.
Я ожидал, что hibernate будет использовать указанный в кавычках идентификатор при создании таблицы.
Есть идеи, как с этим справиться ... кроме переименования поля?
Ответы:
Была та же проблема, но с именем таблицы
Transaction
. Если вы установитеhibernate.globally_quoted_identifiers=true
Тогда будут указаны все идентификаторы базы данных.
Нашел здесь свой ответ Специальный символ в имени таблицы, вызывающий ошибку гибернации
И нашел все доступные настройки здесь https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html
Не удалось найти лучших документов для этого.
В моем случае настройка была в моем файле свойств Spring. Как упоминалось в комментариях, он также может быть в других файлах конфигурации, связанных с гибернацией.
источник
persistence.xml
проектах для JBoss.Используя Hibernate в качестве поставщика JPA 1.0, вы можете избежать зарезервированного ключевого слова, заключив его в обратные кавычки:
@Column(name="`open`")
Это синтаксис, унаследованный от Hiberate Core:
В JPA 2.0 синтаксис стандартизирован и становится следующим:
@Column(name="\"open\"")
Ссылки
Связанные вопросы
источник
@Column(name="[open]")
намного красивее :)Экранирование зарезервированных ключевых слов вручную
Если вы используете JPA, вы можете избежать двойных кавычек:
@Column(name = "\"open\"")
Если вы используете собственный API Hibernate, вы можете избежать их с помощью обратных кавычек:
@Column(name = "`open`")
Автоматическое экранирование зарезервированных ключевых слов
Если вы хотите автоматически экранировать зарезервированные ключевые слова, вы можете установить свойство конфигурации,
true
специфичное для Hibernatehibernate.globally_quoted_identifiers
:<property name="hibernate.globally_quoted_identifiers" value="true" />
Формат ямл
spring: jpa: properties: hibernate: globally_quoted_identifiers: true
Подробнее читайте в этой статье .
источник
Если вы используете, как показано ниже, он должен работать
@Column(name="[order]") private int order;
источник
@Column(name="\"open\"")
Это наверняка сработает. Та же проблема случилась со мной, когда я изучал спящий режим.
источник
Нет - измените название столбца.
Это зависит от базы данных, и вы просто не можете создать такой столбец. В конце концов, hibernate отправляет DDL в базу данных. Если вы не можете создать допустимый DDL с этим именем столбца, это означает, что спящий режим тоже не может. Я не думаю, что цитирование решило бы проблему, даже если вы пишете DDL.
Даже если вам как-то удастся избежать названия - измените его. Он будет работать с этой базой данных, но не будет работать с другой.
источник
Некоторые реализации JPA (например, тот, который я использую, DataNucleus) автоматически цитируют идентификатор для вас, поэтому вы никогда не получите его.
источник