簡體   English   中英

具有2個實體表和1個關聯表的休眠條件

[英]Hibernate criteria with 2 entities table and 1 association table

我需要使用休眠條件在DAO中進行查詢,但我不確定如何進行。

我有2個實體,A和B,以及一個關聯表,其中包含A和B的ID。 A不認識B,而B不認識A。

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

我畫了一張圖,希望對解釋有所幫助。

范例圖片 在此處輸入圖片說明

如您所見,表A有3條記錄,表B也有3條記錄,表AssocAB也有3條記錄。 我想找到在AssocAB中與B1相關聯的所有A。 查詢應返回A1和A3。

可能嗎?

這是類,並帶有注釋的關系。

實體A:無注釋

實體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表。

提前致謝。

我試圖用您的指示編寫一個條件查詢,但這並不容易,因為您告訴AB表具有一個int ID ,然后將Strings放入行中( "A1""B1" ...)。 我以為您的idString而不是整數。 您應該具有以下內容:

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());
}

如果您在B類中具有name屬性,則必須修改限制:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM