Использование зарезервированных ключевых слов JPQL с JPA - PullRequest
7 голосов
/ 28 января 2010

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

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

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

Ответы [ 2 ]

11 голосов
/ 06 сентября 2010

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

В спецификации JPA нет ничего , в котором говорится, что если это делает ваш поставщик, это зависит от поставщика.

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

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

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

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

@Table(name="`Group`")

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

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

4 голосов
/ 28 января 2010

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

...