[英]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表。
提前致謝。
我試圖用您的指示編寫一個條件查詢,但這並不容易,因為您告訴A
和B
表具有一個int ID
,然后將Strings
放入行中( "A1"
, "B1"
...)。 我以為您的id
是String
而不是整數。 您應該具有以下內容:
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.