java - 如何在 Spring Data JPA 中使用 CTE 表达式 WITH 子句

标签 java sql-server spring-boot spring-data-jpa common-table-expression

我想在 SQL Server 中编写递归查询。所以我正在使用 CTE。查询在 SSMS 中正常工作,但是当我尝试在 JPA 中使用与 native SQL 相同的 CTE 时,它会出现错误:

Invalid name column Id.

实体(我在 CTE 中使用它来递归地获取数据)有 @Id @Column(name="pk_id") private int Id 字段。

我也关注了这个 SOQ:cte sql to simple subset query for JPA

但仍然收到无效名称列 ID 的错误。

我以前从未使用过 CTE。如何解决?

最佳答案

您可以在 JPA 存储库中编写 SQL 查询,因为 @Query 注释也采用 native 查询。为此,您需要在值参数中指定 SQL 查询,并且 nativeQuery 为真,如下所示。

您也可以编写 CTE 查询。

public interface ISomeRepository extends JpaRepository<Entity, Long> {


    @Query(value = "SQL QUERY NEED TO BE WRITTEN HERE", nativeQuery = true)
    List<Long> getEntityIds();
}

关于java - 如何在 Spring Data JPA 中使用 CTE 表达式 WITH 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67156121/

相关文章:

java - Hibernate Timestamp 到 LocalDateTime 的转换意外结果

c# - 当 BoundField 为零时禁用 ButtonField

sql-server - 有没有办法检索已在 MS SQL Server Management Studio 的事务中定义的现有保存点列表

sql - 将查询变量传递给MSDB.dbo.sp_Send_DBMail

java - JUnit 测试有问题吗?

java - 有没有办法使用 RxJava 让方法在多个线程上运行

java - 获取 Hibernate 序列 nextVal (Oracle) 时发生异常

hibernate - 如何将持久性单元的 JPA EntityManagerFactory 设置为不为 'default'

java - 转换带有序数的日期(第 11、22 等)

java - 连接被 Docker 中的两个微服务拒绝