sha*_*ley 4 java spring-data-jpa
目前,在我的 spring @Query 中创建本机 SQL 时,我无法知道 SQL where 子句中的字段(认为是临时的)。因此我传递了整个 where 子句。
如果我将 SQL 输出到控制台并将其粘贴到我的 SQL 编辑器中,我就能够收到有效的结果集。
SELECT * FROM lorder WHERE order_id = 1196077
Run Code Online (Sandbox Code Playgroud)
控制台的最后一个 SQL 输出是:Hibernate:
/* dynamic native SQL query */ SELECT
*
FROM
lorder
WHERE
?
and the where clause value being passed in to the @query is:
order_id = 1196077
Run Code Online (Sandbox Code Playgroud)
这就是我目前正在做的事情,但不起作用。
@Query(
value = "SELECT * FROM lorder WHERE :where",
nativeQuery = true)
List<OrderEntity> listSelected(@Param("where") String where);
Run Code Online (Sandbox Code Playgroud)
不确定是否可以传递整个 where 子句,但我期待一个列表。然而我目前得到的是一个空的集合。
由于使用@Query注释,您只能使用特定 Java 类型的命名参数(您的:where)或序数参数(例如?1,?2),因此不可能注入部分 SQL 表达式。
但是,您可以使用TypedQuery将部分 SQL 添加到查询中:
public List<OrderEntity> getOrdersUsingWhereClause(EntityManager em, String whereClause) {
TypedQuery<OrderEntity> query = em.createQuery(
"SELECT o FROM lorders o WHERE " + whereClause,
OrderEntity.class);
return query.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
请参阅https://www.objectdb.com/java/jpa/query/parameter#Parameters_vs。文字
| 归档时间: |
|
| 查看次数: |
14587 次 |
| 最近记录: |