Java 参数前缀';后不允许有空格:';

Java 参数前缀';后不允许有空格:';,java,oracle,hibernate,Java,Oracle,Hibernate,我的问题是我试图在查询中插入包含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_

我的问题是我试图在查询中插入包含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正在解析一个insert,该insert包含一个硬编码的值,该值中有一个冒号。如果您将insert重写为使用参数,那么Hibernate将不会在语句中看到该值。

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

eg: where user_id = :userId
在这里,如果您使用与“userId”相同的名称设置参数,您不会遇到任何问题;
2) 您正在键入值

eg: select count(id) :: integer
执行此操作时,必须使用转义字符,否则hibernate会认为它是一个参数。它将给出一个错误“未设置所有参数” 您可以通过使用转义字符编写代码来克服这一问题

eg:select count(id) \\:\\: integer
所以这会解决你的问题。 如果错误地使用正斜杠而不是反斜杠,则会出现错误“前缀“

但我强烈建议您使用CAST函数,而不是使用
:“
此运算符 ie
选择强制转换(计数(id)为整数)

这是更好的类型转换方法,它将导致最小的错误

问题是您的记录列包含“:”,因此,Hibernate在它之后等待一个参数。
我知道你的问题也一样

将查询用单引号括起来似乎是错误的。这是在什么背景下出现的?这里回答了类似的问题@NathanHughes我只是更新了信息。没有用于封闭查询的单引号。这是当我以某种方式使用拦截器将查询放入log.info()@MaxZoom时,但我真的不知道如何对其进行编码。我更喜欢其他更快的方法,比如加上双反斜杠,让它工作起来。将值作为参数添加,而不是硬编码,不是更容易吗?这样,在hibernate解析此文件以查找命名参数时,它们就不会出现问题了。因此,请帮助此人找到解决方案。我在mysql中遇到分配问题:@current_client_user_id:=client_user_id
Wrong: select count(id)//://: integer
Right: select count(id)\\:\\: integer