如何在HQL中编写类似的查询

Ni3*_*Ni3 15 hibernate hql

我想执行搜索以特定字母开头的特定字符串.因此,例如,如果起始字母表是'A'den,则它应该产生一个结果,该结果将包含所有带字母表的字符串'A'.

我该如何实现这一目标?

我的查询如下所示

Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+"  like %?%");
qry.setString(0,searchField);
Run Code Online (Sandbox Code Playgroud)

Ale*_*r M 24

将您的查询更改为:

Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+"  like ?");
qry.setString(0, "%"+searchField+"%");
Run Code Online (Sandbox Code Playgroud)

  • 这不容易受到 SQL 注入攻击吗? (4认同)

May*_*urB 13

您可以使用标准来使用

session = sessionFactory.openSession();
Criteria query = session.createCriteria(Pojo.class);
query.add(Restrictions.like("column", "a", MatchMode.START));
Run Code Online (Sandbox Code Playgroud)

它将为您提供以alpha-bate'a'开头的字符串列表.


rin*_*maz 7

改成

Query qry = session.createQuery("From RegistrationBean as rb where rb ";
if (searchField != null)
{
    qry = qry + " where rb.searchCriteria like :searchField ";
}
if ( searchField!= null)
{
    query.setString("searchField","%"+searchField+"%");
}
Run Code Online (Sandbox Code Playgroud)

  • 我会用两个单独的查询来做到这一点。 (2认同)

Rom*_*n C 6

这条路

createQuery("from RegistrationBean as rb where rb.:searchCriteria like '%:searchField%'"); 
Run Code Online (Sandbox Code Playgroud)

  • 您听说过 SQL 注入吗?http://en.wikipedia.org/wiki/SQL_injection 必须使用参数绑定来避免这种情况。 (2认同)
  • @RomanC 有三种类型的响应:upvote、downvote、ignore。欢迎。 (2认同)