【发布时间】:2019-11-13 10:55:49
【问题描述】:
目前,在我的 spring @Query 中创建本机 SQL 时,我无法知道 SQL where 子句(想想 adhoc)中的字段。因此,我传递了整个 where 子句。
如果我将 SQL 输出到控制台并将其粘贴到我的 sql 编辑器中,我就能收到一个有效的结果集。
SELECT * FROM lorder WHERE order_id = 1196077
到控制台的最后一个 SQL 输出是: 休眠:
/* dynamic native SQL query */ SELECT
*
FROM
lorder
WHERE
?
and the where clause value being passed in to the @query is:
order_id = 1196077
这是我目前正在做的,但不起作用。
@Query(
value = "SELECT * FROM lorder WHERE :where",
nativeQuery = true)
List<OrderEntity> listSelected(@Param("where") String where);
不确定是否可以传递整个 where 子句,但我期待一个列表。但是我目前得到的是一个空集合。
【问题讨论】:
-
我无法理解您想要实现的目标,以及为什么您使用本机查询而不是 JPQL 查询。如果您尝试执行动态创建的查询,请使用条件 API 或 QueryDSL。这就是他们的目的。如果你想用一个方法来执行几个不同的静态查询,千万不要这样做:它会导致无法测试该方法,多次重用它,使代码不清晰,测试更脆弱。跨度>
-
谢谢 JB。我将其更改为使用 Query query = entityManager.createQuery("Select...)
-
查看 Spring Data JPA 中的
JpaSpecificationExecutor<T>和Specification<T>。
标签: java spring-data-jpa