У меня есть такая сущность:
@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>();
}
и еще один:
@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;
}
Используя Criteria API, я хочу получить уникальные AlbumD с отфильтрованным набором изображений. Я пытаюсь что-то вроде этого:
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;
}
И вот я получаю альбом со всеми связанными картинками. Они не фильтруются вообще.
Когда я пытаюсь выполнить запрос, напечатанный регистратором, я получаю только четыре строки с количеством изображений с заданным идентификатором события, но в альбоме я получаю все изображения.
Я также пробовал другие ResultTransformers, но в итоге получил много результатов (4) не отличных.
Что я пропускаю или делаю неправильно?