2016-12-15 4 views
0

Я не получаю запись, если какое-либо поле в базе данных имеет нулевое значение, будь то имя или местоположение компании. Здесь keyword - это то, что я вхожу из формы.Как выполнить операцию поиска по двум полям с одним и тем же ключевым словом в hql?

Это мой запрос:

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

Кто-нибудь знает, как сделать эту работу?

ответ

1

я достиг с помощью апачского поиска 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(); 
1

Поскольку вы должны использовать это нуль в HQL (. Если есть параметры с нулевым потенциалом) Используется:

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) 
} 
+0

Спасибо за предложение Dark Knight :-) –

+0

Здесь ключевое слово wont be null coz iam, вводящее какую-то вещь из формы в качестве ключевого слова ... iam не получает запись всякий раз, когда какая-либо из поданной нулевой в базе данных может быть название компании или ее местоположение. –