【发布时间】:2017-09-21 06:34:12
【问题描述】:
我正在设置一个 Spring Data JPA Repo 来处理 postgresql 数据库中的序列。我以为这很简单:
@Query(nativeQuery = true, value = "CREATE SEQUENCE IF NOT EXISTS ':seq_name' START WITH :startAt")
fun createSequence(@Param("seq_name") seq_name: String, @Param("startAt") startAt: Long = 0)
@Query(nativeQuery = true, value = "SELECT nextval(':seq_name')")
fun nextSerial(@Param("seq_name") seq_name: String) : Long
@Query(nativeQuery = true, value = "DROP SEQUENCE IF EXISTS ':seq_name'")
fun dropSequence(@Param("seq_name") seq_name: String)
@Query(nativeQuery = true, value = "setval(':seq_name', :set_to, false")
fun setSequence(@Param("seq_name") seq_name: String, @Param("set_to") setTo: Long)
但由于某种原因,我得到了
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter with that name [seq_name] did not exist; 每当我尝试调用该方法时。知道为什么会发生这种情况吗?
【问题讨论】:
-
使用 ?1 访问参数时也会发生同样的情况
-
classpath 上有哪个版本的 spring-data-jpa?
-
只需删除 ' 字符,例如
@Query(nativeQuery = true, value = "SELECT nextval(:seq_name)") -
删除刻度适用于选择查询。对于创建查询,我现在得到一个
org.hibernate.exception.SQLGrammarException: could not extract ResultSet -
可能是因为您正在参数化一些无法参数化的东西,例如序列名称。
标签: spring postgresql spring-data-jpa kotlin