【问题标题】:How to write a like query in HQL如何在 HQL 中编写类似查询
【发布时间】:2012-11-13 18:38:59
【问题描述】:

我想搜索以特定字母开头的特定字符串。

因此,例如,如果起始字母是 'A',那么它应该产生一个结果,其中将包含所有带有字母 'A' 的字符串。

我如何做到这一点?

我的查询如下图:

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

【问题讨论】:

  • like 不适合你?
  • 不,我认为我的查询有问题。查询 qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like %?%") qry.setString(0,searchField);
  • What have you tried? 请在问题中发布您到目前为止的内容。
  • 我们必须猜测吗?显示您的查询?

标签: java hibernate hql sql-like


【解决方案1】:

将您的查询更改为:

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

【讨论】:

  • 这不是 SQL 注入漏洞吗?
  • @OptimusPrime 不,是的。
【解决方案2】:

您可以使用标准来使用like

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

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

【讨论】:

    【解决方案3】:

    改成

    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+"%");
    }
    

    【讨论】:

    • 我会用两个单独的查询来做到这一点。
    【解决方案4】:

    这边

    createQuery("from RegistrationBean as rb where rb.:searchCriteria like '%:searchField%'"); 
    

    【讨论】:

    【解决方案5】:
    Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like :sf");
    qry.setString("sf",'%'+searchField+'%');
    

    上面的东西对我有用:)

    【讨论】:

    • 这很容易受到 SQL 注入的攻击。
    猜你喜欢
    • 2016-01-17
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2018-04-06
    相关资源
    最近更新 更多