首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >参数前缀':‘后不允许有空格

参数前缀':‘后不允许有空格
EN

Stack Overflow用户
提问于 2015-02-10 11:46:09
回答 4查看 19.9K关注 0票数 13

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

我尝试在char :之前放双反斜杠//,但仍然不起作用。

代码语言:javascript
运行
复制
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||]')
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-13 02:48:50

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

票数 4
EN

Stack Overflow用户

发布于 2015-04-17 21:29:01

根据我的经验,我会告诉你。有两种情况

1)您希望在查询中指定一个参数,该参数的值是动态设置的。

代码语言:javascript
运行
复制
eg: where user_id = :userId

在这里你不会得到任何问题,如果你正在设置与“userId”同名的参数;

2)您正在对值进行类型转换

代码语言:javascript
运行
复制
eg: select count(id) :: integer

当你这样做的时候,你必须使用转义字符,否则hibernate会认为它是一个参数。并且它会给出一个错误“All parameters it "你可以通过使用转义字符编写代码来克服这个问题

代码语言:javascript
运行
复制
eg:select count(id) \\:\\: integer

所以这将会解决你的问题。如果错误地使用了正斜杠而不是反斜杠,则会得到错误前缀“space allowed after

代码语言:javascript
运行
复制
Wrong: select count(id)//://: integer
Right: select count(id)\\:\\: integer

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

票数 15
EN

Stack Overflow用户

发布于 2017-09-30 00:07:38

问题是你的记录列包含":",所以Hibernate在它后面等待一个参数。我和你也有同样的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28423741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档