Je suppose que vous utilisez une version d'Hibernate 2.0 qui implémente JPA. Voici une solution JPA 2.0 qui devrait fonctionner avec n'importe quelle implémentation conforme.
Veuillez annoter uuids
avec l'annotation @ElementCollection
de JPA. N'utilisez pas @CollectionOfElements
d'Hibernate comme mentionné dans d'autres commentaires de réponse. Ce dernier a une fonctionnalité équivalente mais est being deprecated.
Foobar.java
se penchera à peu près comme ceci:
@Entity
public class Foobar implements Serializable {
// You might have some other id
@Id
private Long id;
@ElementCollection
private List<String> uuids;
// Getters/Setters, serialVersionUID, ...
}
Voilà comment vous pouvez construire un CriteriaQuery
pour sélectionner tous les Foobar
s dont uuids
contiennent "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
}
}
J'ai fait un programme de preuve de concept autonome en jouant avec cela. Je ne peux pas l'exclure maintenant. Veuillez commenter si vous voulez que le POC soit poussé vers github.
Essayé avec hibernate 3.6.7-Final et ne fonctionne pas (il semble être un bug en hibernation). – greuze