Использование зарезервированных ключевых слов JPQL с JPA

StackOverflow https://stackoverflow.com/questions/2153881

  •  23-09-2019
  •  | 
  •  

Вопрос

У меня есть класс сущностей под названием «Группа», и NetBeans предупреждает меня: «Имя таблицы сущностей является зарезервированным ключевым словом Java Persistence QL».

Аналогичным случаем может быть использование зарезервированных ключевых слов SQL.

Будет ли это имя экранировано?Поможет ли использование другого имени таблицы решить проблему @Table(name="otherName").Или мне следует переименовать класс?

Это было полезно?

Решение

Будет ли это имя экранировано?

Есть ничего в спецификации JPA так сказано, если это делает ваш провайдер, это зависит от провайдера.

Поможет ли использование другого имени таблицы решить проблему @Table(name="otherName")

Очевидно, так и будет (конечно, если вы не используете другое зарезервированное ключевое слово).Но если вы используете поставщика JPA 2.0, существует стандартный способ экранирования имени объекта базы данных с помощью двойных кавычек:

@Table(name="\"Group\"")

В JPA 1.0 нет ничего стандартного, это зависит от вашего провайдера JPA.Например, Hibernate использует обратные кавычки:

@Table(name="`Group`")

Или мне следует переименовать класс?

Нет.Имя таблицы объекта по умолчанию совпадает с именем объекта, но вы можете управлять им с помощью @Table аннотация, как мы видели.Таким образом, нет необходимости менять имя класса вашей сущности.

Другие советы

Вам не нужно переименовывать класс – и не следует – выбранное вами имя наилучшим образом отражает ваш домен, и вам не следует менять его из-за ограничений инструмента или платформы, если инструмент/фреймворк предоставляет способ избежать «столкновения».JPA предоставляет такой способ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top