Asumo que está utilizando una versión de Hibernate que implementa la APP 2.0. Aquí hay una solución JPA 2.0 que debería funcionar con cualquier implementación compatible.
Anote uuids
con la anotación de JPA @ElementCollection
. No utilice el @CollectionOfElements
de Hibernate como se menciona en algunos de los otros comentarios de respuesta. Este último tiene una funcionalidad equivalente, pero es being deprecated.
Foobar.java
se verá aproximadamente así:
@Entity
public class Foobar implements Serializable {
// You might have some other id
@Id
private Long id;
@ElementCollection
private List<String> uuids;
// Getters/Setters, serialVersionUID, ...
}
Así es como se puede construir un CriteriaQuery
para seleccionar todos los Foobar
s cuyos uuids
contener "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
}
}
Hice un programa autónomo de prueba de concepto mientras jugaba con esto. No puedo sacarlo ahora mismo. Comente si desea que el POC se envíe a github.
Probado con hibernación 3.6.7-Final y no funciona (parece ser un error en hibernación). – greuze