使用CriteriaBuilder

时间:2018-06-14 12:48:37

标签: java hibernate

我需要使用条件构建器搜索文本(如果存在)。 如果这个文本存在于任何一列中,我需要检索数据。

示例数据:

CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Event> criteriaQuery = builder.createQuery(Event.class);
Root<Event> root = criteriaQuery.from(Event.class);
ArrayList<Predicate> conditions = new ArrayList<>();

conditions.add(builder.equal(root.get(Event_.eventId), searchText));

conditions.add(builder.equal(root.get(Event_.eventModule), searchText));

conditions.add(builder.equal(root.get(Event_.eventName), searchText));
criteriaQuery.select(root).where(builder.or(conditions.toArray(new Predicate[conditions.size()])));
javax.persistence.Query query = manager.createQuery(criteriaQuery);
List<Event> eventList = query.getResultList();
return eventList;

现在我正在使用OR clause检查数据是否存在数据。 我是否可以知道如何使用 IN子句

更改此查询

1 个答案:

答案 0 :(得分:0)

您不需要OR条件:

CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Event> criteriaQuery = builder.createQuery(Event.class);
Root<Event> root = criteriaQuery.from(Event.class);

ArrayList<Predicate> conditions = new ArrayList<>();

conditions.add(builder.equal(root.get(Event_.eventId), searchText));

conditions.add(builder.equal(root.get(Event_.eventModule), searchText));

conditions.add(builder.equal(root.get(Event_.eventName), searchText));

//CHANGE THIS ROW
criteriaQuery.select(root).where(conditions.toArray(new Predicate[conditions.size()])));

javax.persistence.Query query = manager.createQuery(criteriaQuery);
List<Event> eventList = query.getResultList();
return eventList;