criteriaBuilder 一个字段like 多个(or的关系不是and)

需求是比如是查出年龄在20-30 同时名字叫王三的**或者**叫李四的
criteriaBuilder.or(predicate, criteriaBuilder.like(name,value);//伪代码

    (希望对应的sql是这样的) :select * from XX a where  age in(20,30) and  (name like '%王三%' or origSourceIp like 李四%')  and sex like '%女%'

我如果按照上面的criteriaBuilder.or(like...)来写 
语句就成了select * from XX a where  age in(20,30) and  name like '%王三%' or origSourceIp like 李四%'  and sex like '%女%'(and之后在两个like 的时候没有括号,这样查询的语句就达不到要求)

难道就criteriaBuilder 就没有那种允许一个字段like 多个值得么···或者的关系不是and的关系

Predicate pred1 = criteriaBuilder.like(root.get("name"),"%"+name+"%");
Predicate pred2 = criteriaBuilder.like(root.get("name"),"%"+name+"%");
predicate.getExpressions().add(criteriaBuilder.or(pred1, pred2));

Criteria criteria = this.createCriteria();
criteria.add(Restrictions.or(Restrictions.like("name","a"),Restrictions.like("name","b")));