Space 不允许出现在参数前缀 ':' 之后

Space is not allowed after parameter prefix ':'

我的问题是我尝试在查询中插入包含 char 的文本

我试过在 char : 前加双反斜杠 // 但还是不行。

ABNORMALLY.java.lang.IllegalArgumentException: 
org.hibernate.QueryException: Space is not allowed after parameter prefix ':' 

INSERT INTO TABLE_A  (A_ID, TYPE_ID, F_ID, REFNO, RECORD) VALUES 
( A_ID_SEQ.nextval, 4 , 9 , 'NY167', q'[LA2010167|SNIP' N CLIP|LMG|1.Unit no\: 1046, 1 st Floor, Limbang Plaza, 98700 Limbang|2010-12-10||]')

这里 Hibernate 正在解析一个插入,其中包含一个硬编码值,其中有一个冒号。如果您重写插入以使用参数,那么 Hibernate 将不会将该值视为语句的一部分。

根据我的经验告诉你。有两种情况
1) 您想在查询中指定一个参数,其值是动态设置的。

eg: where user_id = :userId

如果您设置与"userId"同名的参数,您不会遇到任何问题;
2) 您正在对值进行类型转换

eg: select count(id) :: integer

当你这样做时,你必须使用转义字符,否则休眠会认为它是一个参数。而且会报错"All parameters are not set " 您可以通过使用转义字符

编写代码来克服这个问题
eg:select count(id) \:\: integer

所以这将解决您的问题。 如果您错误地使用了正斜杠而不是反斜杠,您将得到错误 "space is not allowed after prefix"

Wrong: select count(id)//://: integer
Right: select count(id)\:\: integer

但我强烈建议您使用 CAST 函数而不是使用 "::" 这个运算符 即select CAST(count(id) as integer) 这是更好的类型转换方式,它会导致最少的错误

问题是您的 RECORD 列包含“:”,因此,Hibernate 在它之后等待一个参数。 我和你有同样的问题

我没有通过 Spring 引导解决这个问题,我创建了一个函数(实际上是一个过程)并将其用作查询,问题已经解决。