2016-12-15 10 views
0

データベースのフィールドのいずれかが会社名か場所かどうかにかかわらず、レコードが取得されません。ここではkeywordが私がフォームから入力したものです。hqlで同じキーワードを持つ2つのフィールドの検索操作を実行するにはどうすればよいですか?

これが私のクエリです:

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

誰がこの仕事を作る方法を知っていますか?

答えて

1

を:

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

あなたが使用する必要があるので(nullの可能性を秘めたパラメータがある場合。)、HQLでnullで、この使用します。私はそれは私のために働いていますApacheのLucene検索を使用することによって達成

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

ダークナイト:-) –

+0

ここでキーワードはnullではありません。キーワードとしてフォームから入力してください... iamは、ファイルのいずれかがデータベースにnullである場合にレコードを取得しません。会社名または所在地。 –

関連する問題