web-dev-qa-db-fra.com

setResultTransformer dans les critères

Quelle est l'utilisation de la méthode setResultTransformer dans l'API critères? Quelqu'un peut-il expliquer cela avec un exemple simple? J'ai lu les javadocs mais je ne peux pas les comprendre clairement.

Cordialement,

23
user182944

Le ResultTransformer par défaut pour une requête Critères qui n'utilise pas setProjections () sera ROOT_ENTITY.

Si nous avons Student dans une relation ManyToMany avec le département, une requête pourrait ressembler à ceci ...

    Session session = (Session) getEntityManager().getDelegate();
    Criteria crit = session.createCriteria(Student.class)
        .createAlias('departments', 'department');

Cette requête renverra des doublons. Mais définissez le ResultTransformer comme ...

    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

Désormais, les résultats seront distincts lorsque Hibernate rassemblera les résultats. (Ou est-ce que je veux dire unmarshalls?)

Si vous ne souhaitez pas qu'Hibernate renvoie la requête sous la forme d'un List<Student> mais préfère gérer les résultats comme List<Object[]> puis

    crit.setResultTransformer(CriteriaSpecification.PROJECTION)
15
carbontax

Simplement: lorsque vous faites les critères: vous voulez que le jeu de résultats soit dans un objet particulier, vous pouvez l'utiliser comme: par exemple:

 .setResultTransformer(Transformers.aliasToBean(Employee.class));

Employee doit correspondre à l'entité ResultSet.

8
Appesh