En hibernation pouvons-nous avoir des critères à l'intérieur d'un critère

Supposons que j'ai créé un critère sur une classe. Maintenant, à l'intérieur de ce que je veux obtenir des données d'une table différente que je vais utiliser dans les critères actuels. Pour cela encore, je dois créer des critères sur la nouvelle table. Alors est-il possible de créer un nouveau critère dans un critère?

0
ajouté l'auteur Amogh, source
Essayez de vérifier les sous-requêtes stackoverflow.com/a/20427782/1679310
ajouté l'auteur Radim Köhler, source

1 Réponses

Yes  It is possible  , see the description below from the hibernate documentation

https://docs.jboss.org/hibernate/orm /3.3/reference/fr/html/querycriteria.html

15.4. Les associations

En naviguant dans les associations en utilisant createCriteria (), vous pouvez spécifier des contraintes sur les entités associées:

List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "F%") )
    .createCriteria("kittens")
        .add( Restrictions.like("name", "F%") )
    .list();

La seconde createCriteria() renvoie une nouvelle instance de Criteria qui fait référence aux éléments de la collection de chatons.

Il existe également un autre formulaire utile dans certaines circonstances:

List cats = sess.createCriteria(Cat.class)
    .createAlias("kittens", "kt")
    .createAlias("mate", "mt")
    .add( Restrictions.eqProperty("kt.name", "mt.name") )
    .list();
(createAlias() does not create a new instance of Criteria.)

The kittens collections held by the Cat instances returned by the previous two queries are not pre-filtered by the criteria. If you want to retrieve just the kittens that match the criteria, you must use a ResultTransformer.

List cats = sess.createCriteria(Cat.class)
    .createCriteria("kittens", "kt")
        .add( Restrictions.eq("name", "F%") )
    .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
    .list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
    Map map = (Map) iter.next();
    Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
    Cat kitten = (Cat) map.get("kt");
}
0
ajouté