Поле Creating с зарезервированным словом называет с JPA

@Column(name="open")

Используя sqlserver диалект с в спящем режиме.

[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'.

Я ожидал бы, в спящем режиме для использования идентификатора в кавычках при составлении таблицы.

Какие-либо идеи о том, как обработать это... кроме переименования поля?

76
задан Bozho 18 November 2010 в 15:27
поделиться

3 ответа

Нет - изменить имя столбца.

Это зависит от базы данных, и вы просто не можете создать такой столбец. В конце концов, спящий режим наконец отправляет DDL в базу данных. Если вы не можете создать допустимый DDL с этим именем столбца, это означает, что спящий режим тоже не может. Я не думаю, что цитирование решило бы проблему, даже если вы пишете DDL.

Даже если вам как-то удастся избежать названия - измените его. Он будет работать с этой базой данных, но не будет работать с другой.

4
ответ дан 24 November 2019 в 11:09
поделиться

Если вы используете, как показано ниже, все должно работать

@Column(name="[order]")
private int order;
15
ответ дан 24 November 2019 в 11:09
поделиться

Используя Hibernate в качестве провайдера JPA 1.0, вы можете избежать зарезервированного ключевого слова, заключив его в обратные кавычки:

@Column(name="`open`")

Это синтаксис, унаследованный от Hiberate Core:

5.4. Идентификаторы в кавычках SQL

Вы можете заставить Hibernate цитировать идентификатор в сгенерированном SQL заключая имя таблицы или столбца в обратные кавычки в документе сопоставления. Hibernate будет использовать правильный стиль цитаты для диалекта SQL. Обычно это двойные кавычки, но SQL Server использует скобки и MySQL использует обратные кавычки.

 
   
 
 ...

В JPA 2.0 синтаксис стандартизирован и выглядит следующим образом:

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

Ссылки

Связанные вопросы

123
ответ дан 24 November 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: