如果你並不真正需要的LIKE
力量並且完全匹配就足夠了,您可以檢查emails
是否包含email
。
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> p = criteria.from(Person.class);
criteria.select(p);
Expression<List<String>> emails = p.get(Person_.emails);
criteria.where(builder.isMember("[email address]", emails));
TypedQuery<Person> tq = entityManager.createQuery(criteria);
List<Person> persons = tq.getResultList();
注意p.get(Person_.emails)
需要Person
類的靜態元模型。如果你沒有這個,你可以用類型安全代價p.get("emails")
替換那個零件。
如果您確實需要執行LIKE
,您將不得不加入收藏。
Join<Person, String> emailJoin = p.join(Person_.emails);
criteria.where(builder.like(emailJoin, "[email address]"));
criteria.distinct(true);