Hibernate API des Critères de Filtrage collection de propriété

J'ai une telle entité:

@Entity
public class Album {

    private Integer id;
    private Integer ownerId;
    private String name;
    private String description;
    private Date created;
    @OneToMany @JoinColumn(name = "albumId")
    private Set<AlbumUser> users = new HashSet<AlbumUser>();
    @OneToMany @JoinColumn(name = "albumId")
    private Set<Picture> pictures = new HashSet<Picture>();
}

et un autre:

@Entity
public class Picture {

    private Integer id;
    private Integer creatorId;
    private Integer albumId;
    private Date created;
    private String title;
    private String description; 
    @ManyToOne @JoinColumn(name = "eventId")
    private Event event;
}

À l'aide des Critères de l'API je veux obtenir unique AlbumDs avec un ensemble filtré de Picturs. J'ai essayer quelque chose comme cela:

public Album read(Integer albumId, Set<Integer> picFilter) {
        Criteria crit = getCurrentSession().createCriteria(Album.class, "album");
        crit.add(Restrictions.idEq(albumId));
        if (picFilter != null && !picFilter.isEmpty()) {
            crit = crit.createAlias("album.pictures", "picture");
            crit.add(Restrictions.in("picture.event.id", picFilter));
            crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);   
        }       
        Album resultDs = (Album) crit.uniqueResult();       
        return resultDs;
}

Et ici, je reçois l'Album avec toutes les photos associées. Ils ne sont pas filtrés.
Lorsque j'essaie d'exécuter la requête imprimée par un enregistreur, je reçois seulement quatre lignes qui est le nombre de photos avec id de l'événement, mais dans l'Album de toutes les photos.

J'ai aussi essayé d'autres ResultTransformers, mais finalement obtenu beaucoup de résultat (4) ne se distingue pas de l'un.

Ce qui me manque ou de faire le mal?

Pardonne-moi mes cassé la langue 😉
avez-vous essayé de regarder ce de requête sql, hibernate génère?
Je l'ai écrit déjà. Il y a une requête SQL de la récupération de seulement 4 photos, mais j'ai trouvé plus tard, il y a aussi une autre récupération de la totalité d'entre eux. Je commence à croire que mon cas n'est pas applicable aux Critères de l'API 🙁
Je suis venu à une conclusion. Filtrage de la collection associée avec l'entité est dangereux. Il y aura une mise à jour lors de la transaction de sortie. Donc par définition, quelques photos seront retirées de l'album. C'est un mauvais comportement. Alors... collection doit être en lecture seule (pas de pénétration ni actualisable) ou cette affaire pourrait ne pas être mis en œuvre pour des raisons de sécurité. Unfortunetlny, actuellement je n'ai pas mon code maintenant et ne peux pas le vérifier.

OriginalL'auteur Patryk Dobrowolski | 2011-05-23