我有這樣的實體:Hibernate的標準API - 過濾集合屬性
@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;
}
使用標準的API我想用過濾集Picturs的獨特AlbumDs。我嘗試這樣的:
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;
}
在這裏我得到相冊與所有圖片關聯。他們根本沒有被過濾。 當我嘗試執行由記錄器打印的查詢時,我只得到四行,這是給定eventId的圖片數量,但在相冊中我獲取了所有圖片。
我也嘗試過其他ResultTransformers,但最終得到了很多結果(4)沒有明確的結果。
我該錯過什麼或做錯了什麼?
原諒我的斷語;) – 2011-05-23 19:46:47
做您嘗試觀看查詢休眠產生什麼SQL ? – 2011-05-23 21:05:14
我已經寫過了。有一個SQL查詢只能檢索4張圖片,但我後來發現,還有另一個檢索所有這些圖片。我開始相信我的案例不適用於Criteria API :( – 2011-05-23 21:34:03