@Param不能在Spring Data JPA中工作

我正在建立一个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; 每当我试图调用该方法。 任何想法为什么这可能发生?

好的,根据@StanislavL的回答,经过一些调试,我现在有了一个可行的解决方案。 正如@posz指出,我不能绑定标识符,这意味着我必须硬编码的查询。 我把代码从一个JPA接口移动到一个实现的服务,这不是很好,但工程。

 @Service open class SequenceService (val entityManager: EntityManager){ @Transactional fun createSequence(seq_name: String, startAt: Long = 0) { val query = entityManager.createNativeQuery("CREATE SEQUENCE IF NOT EXISTS ${seq_name} START ${startAt}") with(query){ executeUpdate() } } @Transactional fun nextSerial(seq_name: String) : Long { val query = entityManager.createNativeQuery("SELECT nextval(:seq_name)") with(query){ setParameter("seq_name", seq_name) val result = singleResult as BigInteger return result.toLong() } } @Transactional fun dropSequence(seq_name: String) { val query = entityManager.createNativeQuery("DROP SEQUENCE IF EXISTS ${seq_name}") with(query){ executeUpdate() } } @Transactional fun setSequence(seq_name: String, setTo: Long){ val query = entityManager.createNativeQuery("SELECT setval(:seq_name, :set_to, false)") with(query){ setParameter("seq_name", seq_name) setParameter("set_to", setTo) singleResult } } } 

我希望这对于下一个尝试直接使用序列的人来说是有帮助的,而@SequenceGenerator不是一个选项。