【问题标题】:How to perform search operation on two fields with same keyword in hql?如何在hql中对具有相同关键字的两个字段进行搜索操作?
【发布时间】:2016-12-15 13:01:18
【问题描述】:

如果数据库中的任何一个字段为空,无论是公司名称还是位置,我都不会得到记录。这里keyword 是我从表单中输入的内容。

这是我的查询:

Query qry=session.createQuery("select distinct company_name from Company_Info where company_name like '%"+keyword+"%' or  locations.city like '%"+keyword+"%'");

有人知道怎么做吗?

【问题讨论】:

    标签: java mysql hibernate hql hibernate-search


    【解决方案1】:

    既然你必须在 HQL 中使用 is null,(如果有可能为 null 的参数。)使用这个:

    String keywordTerm = keyword==null ? "is null" : "= :keyword";
    
    Query qry=session.createQuery("select distinct company_name from Company_Info where company_name like '%"+keyword+"%' or  locations.city like '%"+keyword+"%'");
    
    if(keyword!=null){
        qry.setParameter("keyword", keyword, Hibernate.STRING)
    }
    

    【讨论】:

    • 感谢您的建议黑暗骑士:-)
    • 这里的关键字不会为空,因为我从表单中输入了一些东西作为关键字......每当数据库中的任何一个字段为空时,我都不会获得记录,它可能是公司名称或位置。
    【解决方案2】:

    我通过使用 apache lucene 搜索实现了它对我有用:

    FullTextSession fullTextSession = Search.getFullTextSession(session);
    fullTextSession.createIndexer(Company_Info.class).startAndWait();
    
    QueryBuilder qb = fullTextSession.getSearchFactory()
        .buildQueryBuilder().forEntity(Company.class).get();
    org.apache.lucene.search.Query query = qb.keyword()
            .onFields("company_name","locations.city")
            .matching(keyword)
        .createQuery();
    
    org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(query, Company_Info.class);
    
    List<Company_Info> result = hibQuery.list();
    

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多