如何在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();
如果数据库中的任何一个字段为空,无论是公司名称还是位置,我都不会得到记录。这里 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();