0

代码如下:

sql = " select '--', staff_no from staff where staff_no = ?";
Session session2 = HibernateUtil.getCurrentSession();               
Query sqlQuery2 = session2.createSQLQuery(sql);             
sqlQuery2.setParameter(0, "04415");  //error in this line

运行时报错

原因:org.hibernate.QueryParameterException:位置超出了声明的序数参数的数量。请记住,序数参数是基于 1 的!职位:1

被抛出,我知道这是由 sql 字符串中的 '--' 引起的,hibernate 将其解释为 sql 注释,

我尝试使用

"select '\\-\\-', staff_no from ...."

这样可以成功运行,但是输出变成\-\-,但是我想要的是--在输出中。

那么如何在hibernate中逃脱'--' createSqlQuery

如果我运行,问题是由 select 子句中的“--”引起的

sql = " select '-', staff_no from staff where staff_no = ?";

没有发现问题。

4

2 回答 2

0

正如您的错误消息所述:

请记住,序数参数是基于 1 的!职位:1

尝试使用这个:

sql = " select \"--\", staff_no from staff where staff_no = ?1";
Session session2 = HibernateUtil.getCurrentSession();               
Query sqlQuery2 = session2.createSQLQuery(sql);             
sqlQuery2.setParameter(1, "04415"); 

根据文档

JPQL 样式的位置参数使用问号声明,后跟序号 - ?1, ?2序数以 1 开头。就像命名参数一样,位置参数也可以在查询中出现多次。

于 2020-09-10T08:14:26.670 回答
0

找不到任何方法,但使用以下解决方法可以工作:

sql = " select replace ('- -', ' ', ''), staff_no from staff where staff_no = ?";
Session session2 = HibernateUtil.getCurrentSession();               
Query sqlQuery2 = session2.createSQLQuery(sql);             
sqlQuery2.setParameter(0, "04415"); 
于 2020-09-18T02:51:46.533 回答