如果公司名称或位置无论数据库中的任何一个字段是否为空,我都无法获取记录。这里keyword
是我从表单中输入的内容。
这是我的疑问:
Query qry=session.createQuery("select distinct company_name from Company_Info where company_name like '%"+keyword+"%' or locations.city like '%"+keyword+"%'");
有人知道如何使这项工作吗?
答案 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();