首页 > 解决方案 > 使用 JPA 进行存储库调用,其中表名是 SQL 中的关键字

问题描述

我正在尝试使用 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);
}

但是这段代码给出了一个错误,因为 Case 是一个保留关键字。为此,我尝试在 stackoverflow 中查找与此类似的问题,但我看到的建议是 Table 的名称需要更改,但因为在我们的例子中,这个表在很多地方都被使用,所以不能冒险的更改名称。

任何关于我们如何克服这个问题的提示都值得赞赏。

标签: javasql-serverjpaspring-data-jpamicroservices

解决方案


您必须在表的名称中使用双引号,以便从字面上获取名称。在您的实体类中,您应该使用以下内容:

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

推荐阅读