【问题标题】:How to use CTE expression WITH clause in Spring Data JPA如何在 Spring Data JPA 中使用 CTE 表达式 WITH 子句
【发布时间】:2021-07-13 07:17:05
【问题描述】:

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

名称列 ID 无效。

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

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

但仍然收到错误,因为名称列 ID 无效。

我以前从未使用过 CTE。如何解决这个问题?

【问题讨论】:

  • CTE 不适用于 JPQL,您需要改用 SQL。
  • 如何使用递归SQL但是?
  • 只需将SQL放入并将native-query设置为true即可。
  • 是的,我试过了。 @Query(value = "sql here",nativeQuery = true) 并得到同样的错误。但是在native-query 中,我尝试了link 中提到的SQL。可以吗?
  • 问题是,如果您将结果与 JPA 实体匹配,则结果列必须与映射匹配。看起来这在您的结果集中已关闭。

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


【解决方案1】:

您可以在 JPA 存储库中编写 SQL 查询,因为 @Query 注释也接受本机查询。为此,您需要在 value 参数中指定 SQL 查询,并且 nativeQuery 为 true,如下所示。

您也可以编写 CTE 查询。

public interface ISomeRepository extends JpaRepository<Entity, Long> {


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2016-11-15
    • 2018-08-23
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多