如何根据条件在多个字段中实现搜索

ale*_*der 2 java hibernate if-statement conditional-statements hibernate-criteria

我正在尝试实现Hibernate全文搜索.用户可以选择哪些字段与搜索相关.这是由JSF中的六个(我的示例)布尔复选框完成的.

六个布尔值意味着2 ^ 6种可能的组合.我需要映射所有这些条件.

例:

boolean a;
boolean b;
boolean c;
boolean d;
boolean e;
boolean f;

if(a){
// do a search with a 
}

..

if(a && b){
// do a search with a and b only
}

..

if(a && b && c){
// do a search with a and b and c only
}
Run Code Online (Sandbox Code Playgroud)

在每个IF语句中,都应该调用一个方法.

基于我的案例的部分示例:

用户想要搜索具有姓氏和/或名称的用户.

org.apache.lucene.search.Query luceneQuery = qb.keyword()
                    .onFields("user.surname", "user.givenname")
                    .matching(searchstring).createQuery();
Run Code Online (Sandbox Code Playgroud)

Conditonally:

QueryBuilder qb = fullTextEntityManager.getSearchFactory()
            .buildQueryBuilder().forEntity(BeitragVO.class).get();

if(user){
org.apache.lucene.search.Query luceneQuery = qb.keyword()
                        .onFields("user.surname", "user.givenname")
                        .matching(searchstring).createQuery();
}

if(company){
org.apache.lucene.search.Query luceneQuery = qb.keyword()
                        .onField("company.name")
                        .matching(searchstring).createQuery();
}

   if(student && company){

    // How can I add all relevant fields(givenname, surname, and name of     
    company) to the query?
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法更好地做到64 IF?

roe*_*gol 5

您可以像这样制作代码:

String search = "";

if(a){
    search += ...
}

..

if(b){
    search += ...
}

..

if(c){
    search += ...
}
Run Code Online (Sandbox Code Playgroud)

只需通过每个复选框自选择添加任何SQL查询(条件)代码,然后运行它