2013-06-29 27 views
0

我需要使用休眠條件在DAO內部進行查詢,但我不知道如何。有2個實體表和1個關聯表的休眠標準

我有2個實體,A和B,以及一個關聯表,它包含A和B的ID。 A不知道B,B不知道A.

我想使用條件查找與某個B相關的所有A。

我做了一個圖,希望它有助於解釋。

Example image enter image description here

正如你所看到的,表A中有3條記錄,表B有3條記錄也和表AssocAB 3條記錄爲好。我想找到與B1的AssocAB關聯的所有A。查詢應該返回A1和A3。

是否有可能?

下面是類和註釋的關係。

實體答:沒有標註

實體B:有實體集甲A

@ManyToMany 
@JoinTable(name = "Assoc_AB", joinColumns = { @JoinColumn(name = "ID_B")}, inverseJoinColumn = { @JoinColumn(name = "ID_A")}) 
@ForeignKey(name = "FK_A_B", inverseName = "FK_B_A") 
public set<A> getA(){ 
    return this.listOfA; 
} 

而且沒有類關聯類,B上的映射創建assoc命令表。

在此先感謝。

+0

女巫休眠關係你實現了嗎? – surfealokesea

+0

確定您正在使用註釋...請使用此註釋更新您的問題 – surfealokesea

+0

感謝您的回答。剛剛更新了我的問題,現在使用註釋映射。 – fsakiyama

回答

0

我試着寫一個標準查詢與您的跡象,而是因爲你告訴AB表具有int ID這並不容易,但你把Strings你行("A1""B1" ......)。我認爲你的idString而不是int。你應該有這樣的事情:

List<A> listOfA = new ArrayList<A>(); 
Criteria criteria = session.createCriteria(B.class, "b"); 
criteria.add(Restrictions.eq("b.id", "B1")); 
List<B> listOfBs = criteria.list(); 
for (B b : listOfBs) { 
    listOfA.addAll(b.getA()); 
} 

如果你有Bname屬性,你就必須修改限制:

criteria.add(Restrictions.eq("b.name", "B1")); 

我希望這個代碼可以幫助您解決問題。

+0

嗨!對不起bout字符串/ id,但id類型是int。我把A1和B1弄得更容易理解,猜測沒有用。 那麼,這實際上解決了我的問題,它比我想象的更容易...因爲我有B上的A集合,我所要做的就是找到B然後得到它的列表......感謝您的幫助! – fsakiyama