反转" in" list子句Hibernate中的JPA标准

时间:2018-01-12 19:51:11

标签: java hibernate jpa criteria

我开发了我的项目Web应用程序,我想更改搜索配置文件功能以使用JPA Criteria。我的想法是省略这些搜索条件,html格式的哪些字段留空。困难的部分是用字符串列表中的兴趣编写谓词。

public List<Profile> searchProfiles(String sex, String city, List<String> interests) {   

    List<String> emptyInterests = new ArrayList<>(); emptyInterests.add(""); 
    Session session =  this.sessionFactory.getCurrentSession(); 
    CriteriaBuilder builder = session.getCriteriaBuilder();
    CriteriaQuery<Profile> criteriaQuery = builder.createQuery(Profile.class);  
    Root<Profile> root = criteriaQuery.from(Profile.class);

    List<Predicate> predicates = new ArrayList<>();

    if(!"".equals(sex)) {
        predicates.add(builder.equal(root.get("sex"), sex ));
    }

    if(!"".equals(city)) {
        predicates.add(builder.equal(root.get("city"), city ));             
    }

    if(!emptyInterests.equals(interests)) {
        // REASON OF ASKING THIS QUESTION 
    }

    criteriaQuery.select(root).where(predicates.toArray(new Predicate[]{}));

    return session.createQuery(criteriaQuery).list();
}

在最后&#34;如果&#34;块我想添加谓词,这意味着或多或少&#34;如果其兴趣点的字符串列表(配置文件类字段)包含来自方法参数&#34;兴趣&#34;的所有元素,则将配置文件添加到结果列表。 &#34 ;.在正常列表中过滤它的条件如下:

for(Profile profile : profiles) {
    if(profile.getInterests().contains(interests))
        results.add(profile);
}

编辑:
以下代码导致ClassCastException:java.base / java.lang.String无法在返回行中强制转换为java.base / java.util.List。

    if(!emptyInterests.equals(interests))
    {
        Expression<String> interestsExpression = root.get("interests");
        Predicate interestsPredicate = interestsExpression.in(interests);
        predicates.add(interestsPredicate);   
    }

0 个答案:

没有答案