2013-06-19 50 views
0

我正在使用休眠版本4.2休眠標準。加入/選擇當沒有Assosiation

我有2個實體。

@Entity 
public class A { 

    Long Id; 
    @ManyToOne 
    B b; 

} 

@Entity 
public class B { 
    Long Id; 
    //There is no relation back here with any annotations to A, and can't add a @OneToMany 
} 

是否有可能對待使用Hibernate Criteria的查詢來獲得看起來像這樣的結果。

List<Map<B,List<A>>>?如果它是一個加入或選擇,無關緊要。

例如我想要的結果:

A.id B.id 

1 1,2,3,4 
2  
3 5 
4 7 
5 

// Trind

回答

0

我從克里斯蒂安·鮑爾那裏得到了書面Hibernate in Action的幫助。從休眠

標準:

List<Object[]> result = 
        session.createCriteria(A.class, "a") 
         .createAlias("b", "i", JoinType.RIGHT_OUTER_JOIN) 
         .setResultTransformer(PassThroughResultTransformer.INSTANCE) 
         .list(); 
0

您可以使用類似下面。我不知道這是否是您的實際要求。假設B B是OneToOne,12 B的ID,

Criteria c = session.createCriteria(A.class, "a"); 
     c.createAlias("a.b", "b"); 
     c.add(Restrictions.eq("a.b.Id", "12")); 
     return c.list(); 

這將返回數組列表,並使用這些陣列可以形成你想要的。

+0

但這種方式,我把它周圍的其他方法?如果有沒有A的B我不會檢索B?這我會得到所有A有一些B? – Trind

+0

從B到A的關係是什麼? OneToOne還是ManyToOne? –

+0

這種方式與其他方式沒有任何關係。我會在我的問題上澄清它 – Trind