2017-03-01 1 views
0

hibernate検索でこのクエリを作成しようとすると成功できませんでした。Hibernate SearchでBooleanJunctionを使用するには

Select * from message where (sender.id = "1" AND message.status = "sent") OR (recipient.id = "1" AND message.status = "new") OR (recipient.id = "1" AND message.status = "seen") 

どのようにしてluceneで行うことができますか?

私はここ

FullTextSession fullTextSession = Search.getFullTextSession(getSessionFactory().getCurrentSession()); 
    QueryBuilder qb = fullTextSession.getSearchFactory() 
      .buildQueryBuilder().forEntity(getPersistentClass()).get(); 

    BooleanQuery bquery = new BooleanQuery(); 

    Query q1 = qb.keyword().onField("sender.id").matching(user.getId()).createQuery(); 
    Query q2 = qb.keyword().onField("status").matching(Message.Status.SENT).createQuery(); 
    BooleanJunction must1 = qb.bool(); 
    must1.must(q1); 
    must1.must(q2); 

    Query q3 = qb.keyword().onField("recipient.id").matching(user.getId()).createQuery(); 
    Query q4 = qb.keyword().onField("status").matching(Message.Status.NEW).createQuery(); 

    BooleanJunction must2 = qb.bool(); 
    must2.must(q3); 
    must2.must(q4); 

    Query q5 = qb.keyword().onField("recipient.id").matching(user.getId()).createQuery(); 
    Query q6 = qb.keyword().onField("status").matching(Message.Status.SEEN).createQuery(); 

    BooleanJunction must3 = qb.bool(); 
    must3.must(q5); 
    must3.must(q6); 

すべてのヘルプを立ち往生?

答えて

0
Query query = qb.bool() 
    .should(must1.createQuery()) 
    .should(must2.createQuery()) 
    .should(must3.createQuery()) 
    .createQuery(); 
+0

ありがとう – devrim

関連する問題