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

How to perform search operation on two fields with same keyword in hql?

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

这是我的查询:

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

有人知道怎么做吗?

由于在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)
}

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