J'avais la méthode suivante, j'ai changé les noms des objets pour des raisons de sécurité :
public List<MyObject> listAllForIds(List<Long> ids) {
Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(MyObject.class)
.createAlias("joinObject", "joinObject")
.add(Restrictions.not(Restrictions.like("name", "string1", MatchMode.END)))
.add(Restrictions.not(Restrictions.like("name", "string2", MatchMode.END)))
.add(Restrictions.in("joinObject.id", ids));
return criteria.list();
}
Changer cela pour utiliser :
javax.persistence.criteria.CriteriaBuilder
javax.persistence.criteria.CriteriaQuery
La requête se présente comme suit :
public List<MyObject> listAllForIds(List<Long> ids) {
CriteriaBuilder builder = getSessionFactory().getCurrentSession().getCriteriaBuilder();
CriteriaQuery<MyObject> criteria = builder.createQuery(MyObject.class);
Root<MyObject> myObjectRoot = criteria.from(MyObject.class);
Join<MyObject, JoinObject> joinObject = myObjectRoot.join("joinObject");
Predicate likeRestriction = builder.and(
builder.notLike( myObjectRoot.get("name"), "%string1"),
builder.notLike( myObjectRoot.get("name"), "%string2")
);
criteria.select(myObjectRoot).where(joinObject.get("id").in(ids), likeRestriction);
TypedQuery<MyObject> query = getSessionFactory().getCurrentSession().createQuery(criteria);
return query.getResultList();
}
J'espère que cela aidera quelqu'un d'autre, n'hésitez pas à suggérer des changements pour améliorer le code.
2 votes
Hibernation version ????
0 votes
Avez-vous besoin d'une méthode pour répertorier les objets du domaine ? Si oui, essayez
Bus.createCriteria()