【问题标题】:How to write search query in hibernate如何在hibernate中编写搜索查询
【发布时间】:2012-01-31 13:15:42
【问题描述】:

我试图在休眠中编写一个搜索查询。我从公开会议源代码中获得了帮助。 所以我的查询:

public User getAllUser(String search) {
    String[] searchItems = search.split(" ");
    try {
        String sqlQuery = "SELECT * FROM  USER u " + "WHERE u.deleted = 1 ";
        sqlQuery += "AND ( ";
        for (int i = 0; i < searchItems.length; i++) {
            if (i != 0) {
                sqlQuery += " OR ";
            }
            sqlQuery += "( " + "lower(u.last_name) LIKE '"
                    + StringUtils.lowerCase("%" + searchItems[i] + "%")
                    + "' " + "OR lower(u.first_name) LIKE '"
                    + StringUtils.lowerCase("%" + searchItems[i] + "%")
                    + "' " + "OR lower(u.username) LIKE '"
                    + StringUtils.lowerCase("%" + searchItems[i] + "%")
                    + "' " + ") ";
        }
        sqlQuery += " )";

        log.debug("sqlQuery : " + sqlQuery);
        Query query = sessionFactory.getCurrentSession().createQuery(
                sqlQuery);

        return (User) query.list().get(0);

    } catch (HibernateException e) {
        e.printStackTrace();
    }
    return null;
}

它说有一个意外的令牌,但我没有找到它在哪里。

所以我有两个问题:

  1. 如何使其发挥作用。
  2. 如何在休眠中使用 Criteria 和 Projection/Restrictions 编写搜索查询

【问题讨论】:

  • 无论如何,您是否每次都收到此错误,或者它是否出现在特定的搜索字符串中?您能否举一个导致错误的 SQL 输出示例。
  • 嘿@perissf 我没听懂...
  • 嘿@Digbyswift 我解决了。我使用 createSqlQuery 方法解决了它。我正在寻找如何使用 Criteria 转换它...

标签: java hibernate search


【解决方案1】:

你可以使用:

    Query query = sessionFactory.getCurrentSession().createQuery("" +
            "select * from OdontogramaDiagnosticoModel where odontologia = :idOdontologia");
    query.setParameter("idOdontologia", "102");
    return query.list();

这里展示了两件事你应该注意:

另一个例子:

sessionFactory.getCurrentSession().createCriteria(OdontologiaDiagnostico.class)
    .add(Restrictions.eq("diagnosticosClinicos", "test"));

【讨论】:

    【解决方案2】:

    这不是休眠查询。它是原生 SQL。您应该使用 createSQLQuery 如下

    Query query = sessionFactory.getCurrentSession().createSqlQuery(
                    sqlQuery);
    

    请参阅this 以了解使用休眠的选择。

    另外,我建议你选择Criterias

    【讨论】:

      【解决方案3】:

      这一切看起来都非常复杂和凌乱。您是否考虑过使用 Hibernate Search 代替?它旨在使此类查询变得简单。

      【讨论】:

      • 我在考虑使用休眠搜索,但是休眠搜索是为全文搜索设计的,到目前为止我知道.. 现在我不需要全文搜索。
      • 这很公平。我只是评论说,您在代码中尝试执行的操作是 Hibernate Search 的设计目标。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 2013-06-27
      相关资源
      最近更新 更多