#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