Я предполагаю, что вы используете версию Hibernate, которая реализует JPA 2.0. Вот решение JPA 2.0, которое должно работать с любой совместимой реализацией.
Пожалуйста, аннотируйте uuids
аннотацией @ElementCollection
JPA. Не используйте @CollectionOfElements
Hibernate, как упомянуто в некоторых других комментариях. Последний имеет эквивалентную функциональность, но устарел .
Foobar.java
будет выглядеть примерно так:
@Entity
public class Foobar implements Serializable {
// You might have some other id
@Id
private Long id;
@ElementCollection
private List<String> uuids;
// Getters/Setters, serialVersionUID, ...
}
Вот как вы можете создать CriteriaQuery
, чтобы выбрать все Foobar
s, в которых uuids
содержится "abc123".
public void getFoobars() {
{
EntityManager em = ... // EM by injection, EntityManagerFactory, whatever
CriteriaBuilder b = em.getCriteriaBuilder();
CriteriaQuery<Foobar> cq = b.createQuery(Foobar.class);
Root<Foobar> foobar = cq.from(Foobar.class);
TypedQuery<Foobar> q = em.createQuery(
cq.select(foobar)
.where(b.isMember("abc123", foobar.<List<String>>get("uuids"))));
for (Foobar f : q.getResultList()) {
// Do stuff with f, which will have "abc123" in uuids
}
}
Во время игры с этим я создал отдельную программу для проверки концепции. Я не могу вытолкнуть это прямо сейчас. Пожалуйста, прокомментируйте, если вы хотите, чтобы POC был переведен на github.