Wenn Sie nicht wirklich brauchen, die Macht der LIKE
und eine genaue Übereinstimmung ist genug, können Sie überprüfen, ob emails
email
enthält.
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();
Beachten Sie, dass p.get(Person_.emails)
ein statisches Metamodell der Person
Klasse erfordert. Wenn Sie das nicht haben, können Sie dieses Teil auf Kosten von Typ-Sicherheit durch p.get("emails")
ersetzen.
Wenn Sie eine LIKE
durchführen müssen, müssen Sie der Sammlung beitreten.
Join<Person, String> emailJoin = p.join(Person_.emails);
criteria.where(builder.like(emailJoin, "[email address]"));
criteria.distinct(true);