如何在hql中使用相同关键字对两个字段执行搜索操作?

时间:2016-12-15 13:01:19

标签: java mysql hibernate hql hibernate-search

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

这是我的疑问:

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

有人知道如何使这项工作吗?

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:1)

我通过使用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();