【发布时间】:2019-02-22 03:08:57
【问题描述】:
我正在尝试使用名为 F0001 的序列对 MariaDb 10.3 的 @Query 方法进行参数化
在this tutorial,第 5.2 节有这个例子
5.2.本国的 本机查询的索引参数的工作方式与 JPQL 完全相同:
@Query(
value = "SELECT * FROM Users u WHERE u.status = ?1",
nativeQuery = true)
User findUserByStatusNative(Integer status);
但是当我尝试做同样的事情时(使用序列)
@Query(value = "SELECT NEXTVAL(?1)", nativeQuery = true)
Long getNextSequenceByFleetId(String fleetId);
虽然在数据库中正确设置了序列,但它对我不起作用。
SELECT NEXTVAL(F0001) --> returns nextval 2
我在这里缺少什么?
谢谢。
PS:我看到了this post,但这些示例没有使用@Query 注释。
更新:
按照@JB Nizet 在 cmets 中的建议,我尝试使用 SpEL:
https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions
@Query("select u from User u where u.age = ?#{[0]}")
List<User> findUsersByAge(int age);
我尝试了以下方法:
@Query(value = "SELECT NEXTVAL(?#{[0]})", nativeQuery = true)
Long getNextSequenceByFleetId(String fleetId);
但是唉……
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''F0001')' at line 1
【问题讨论】:
-
您可以将值作为参数传递给查询。但不是表、列或序列名称。数据库需要这些信息来准备查询计划。
-
如果我没记错的话,您可以使用 SpEL 通过连接参数值来模拟它。谷歌为它。为您完成:spring.io/blog/2014/07/15/…
-
我遵循这个例子:
-
非常感谢!我尝试了很多方法,但无法集成一个简单的字符串。更新了问题
-
FWIW JPQL 不是“本机”查询。 SQL 是本机查询。 JPQL 是一种完全不同的查询语言。建议你修正一下这个标题
标签: hibernate spring-boot spring-data-jpa mariadb jpql