【问题标题】:How to escape '--' in hibernate createSqlQuery?如何在hibernate createSqlQuery中转义'--'?
【发布时间】:2020-09-10 06:45:41
【问题描述】:

代码如下:

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 ...."

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

那么如何在hibernatecreateSqlQuery中转义'--'?

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

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

没有发现问题。

【问题讨论】:

  • 你使用什么数据库?
  • 微软 sql 服务器

标签: hibernate native-sql


【解决方案1】:

正如您的错误消息所述:

记住序数参数是从 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 开头。与命名参数一样,位置参数也可以在查询中出现多次。

【讨论】:

  • 不,这并没有解决问题,仍然是同样的错误。原因:org.hibernate.QueryParameterException:位置超出了声明的序数参数的数量。请记住,序数参数是基于 1 的!职位:2
  • 尝试使用" select \"--\", staff_no from staff where staff_no = ?1",正如它所说的here
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多