2013-01-21 37 views
2

我正在做一個正確的外部連接貓與業主,我如何得到一個業主名單?休眠條件右外部連接結果列表

Criteria criteria = session.createCriteria(Cats.class); 
List<Owners> list= criteria.createCriteria("owner",JoinType.RIGHT_OUTER_JOIN); 

貓有一個主人,但主人可以有很多貓。

編輯:

這樣做的原因,是爲了能夠限制添加到基於多種關係的準則,讓我解釋這一點。

Criteria criteria = session.createCriteria(Cats.class); 
criteria.add(Restrictions.or(Restrictions.isNull("breed.pkBreed")).add(Restrictions.ne(breed.desc,"Egyptian cat"))); 
List<Owners> list= criteria.createCriteria("owner",JoinType.RIGHT_OUTER_JOIN); 

在這種情況下,我檢索所有非埃及貓的業主和所有的貓業主目前還沒有分配的品種,這是我確切的情況,但具有不同的數據。

我知道這聽起來很奇怪,但這是我的要求確切的查詢。

而且,即使我不轉變列表數據,我不知道什麼是它的線索,這樣我就可以在它迭代...

回答

3

很多與別名頭痛後,我得到了我想要=)

Criteria criteria = session.createCriteria(Cats.class,"c"); 
criteria.add(Restrictions.isNull("breed.pkBreed")); 
criteria.createCriteria("owner","o",JoinType.RIGHT_OUTER_JOIN,Restrictions.eq(c.breed.desc,"Egyptian cat")) 
    .setProjection(Projections.projectionList() 
     .add(Projections.property("o.pkOwner").as("pkOwner")) 
     .add(Projections.property("o.name").as("name")) 
    .setResultTransformer(Transformers.aliasToBean(Owners.class)); 
List<Owners> list=criteria.list(); 
1

因爲你說「貓有一個所有者,但一個主人可以有很多貓。「你怎麼能得到所有者名單,如果你想要所有者名單,所以不需要做外部連接或任何其他連接只需提供所有者的身份證件或在沒有任何條件的情況下獲得所有所有者。