如何在休眠createSqlQuery中转义“-”?

时间:2020-09-10 06:45:41

标签: hibernate native-sql

代码如下:

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字符串中的'-'引起的,休眠将其解释为sql注释,

我尝试使用

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

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

那么如何在休眠createSqlQuery中转义'-'?

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

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

没有发现问题。

2 个答案:

答案 0 :(得分: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"); 

根据documentation

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

答案 1 :(得分:0)

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

sql = " select replace ('- -', ' ', ''), staff_no from staff where staff_no = ?";
Session session2 = HibernateUtil.getCurrentSession();               
Query sqlQuery2 = session2.createSQLQuery(sql);             
sqlQuery2.setParameter(0, "04415"); 
相关问题