Сделайте вызов репозитория с помощью JPA, где имя таблицы является ключевым словом в SQL

#java #sql-server #jpa #spring-data-jpa #microservices

Вопрос:

Я пытаюсь написать вызов репозитория в своих микросервисах с помощью JPA, теперь проблема в том, что имя таблицы, для которой я пытаюсь вызвать репозиторий, является зарезервированным ключевым словом в SQL, т. Е. «CASE».

В настоящее время, чтобы преодолеть эту проблему, мы пишем собственный запрос, подобный этому, в нашем репозитории

 @Repository
public interface CaseRepository extends JpaRepository<Case, Long> {
    @Query(value = "Select * from cft."case" where id = :idCase", nativeQuery = true)
    Case findCaseById(Long idCase);
}
 

Поскольку это не очень хороший подход, поэтому я пытаюсь удалить NativeQuery и пытаюсь сделать что-то вроде этого

 @Repository
public interface CaseRepository extends JpaRepository<Case, Long> {
      @Query("select c from Case c where c.id = :idCase")
      Cases getCaseById(Long idCase);
}
 

Но этот блок кода выдает ошибку, потому что регистр-зарезервированное ключевое слово. Для этого я попытался найти проблемы, подобные этой, здесь, в stackoverflow, но предложение, которое я увидел, состояло в том, что имя таблицы необходимо изменить, но так как в нашем случае эта таблица используется во многих местах, поэтому я не могу рисковать изменением имени.

Любые намеки относительно того, как мы можем преодолеть эту проблему, приветствуются.

Ответ №1:

вы должны использовать двойные кавычки в названии таблицы, чтобы оно воспринималось буквально. В вашем классе сущностей вы должны использовать что-то вроде:

 @Entity
@Table(name = ""case"")
public class Case {
}
 

Комментарии:

1. Нет, это не работает. Когда мы делаем это и указываем имя буквально, это говорит о том, что таблица не найдена «случай» и вызывает исключение SchemaManagementException