的表之間的關係如下:休眠標準與多個左內API聯接
- A的用戶表的列同一性,用戶名,年齡
- 的地址表的列同一性,類型,街道
- 具有列標識,用戶標識和地址標識的user_address_associations表。用戶標識符與用戶有外鍵關係。標識符和地址標識符具有外鍵關係到地址標識符。
我希望選擇地址類型設置爲1的所有超過18年的用戶。用戶和地址實體的Hibernate映射存在,但在用戶到地址的映射中沒有定義關聯。用戶和地址之間的唯一鏈接通過user_address_associations表指定。另外,User類未定義Addresses屬性。
原始SQL將是:
select * from users
inner join user_address_associations
on user_address_associations.userid=users.identity
inner join addresses
on user_address_associations.addressid=addresses.identity and addresses.type=1
where db.users.age >= 18
使用的Hibernate 3.6.5標準API,我開始與此:
Criteria criteria = session.createCriteria(User.class);
// how to do the join to addresses table through user_address_associations table?
// where clause
criteria.add(Restrictions.gt("Age", 1176));
的問題是,我怎麼formuate的加入?
可能的[Hibernate標準和多重連接]的副本(http://stackoverflow.com/questions/2252468/hibernate-criteria-and-multiple-join) – mindas
@mindas,謝謝你的迴應。我剛剛閱讀了您在引用鏈接中發佈的答案,但仍需要對.createCriteria(「b」,「join_between_a_b」)進行一些清晰的說明,以及如何轉化爲A類和B類之間的聯接。仍然還試圖瞭解API文檔。 –
「如何轉換爲類A和B之間的連接」 - 如果要查看實際生成的SQL,請爲org.hibernate.SQL啓用跟蹤日誌記錄。如果你想了解Hibernate如何在內部完成它,你需要研究Hibernate的源代碼。 – mindas