1. 程式人生 > >【SSH】Hibernate中DetachedCriteria設定關聯屬性的查詢條件和獲取關聯屬性結果集的倆個問題!

【SSH】Hibernate中DetachedCriteria設定關聯屬性的查詢條件和獲取關聯屬性結果集的倆個問題!

問題一:Hibernate設定關聯屬性的查詢條件

如果我們想要在離線DetachedCriteria中設定物件的關聯屬性物件的非外來鍵屬性查詢條件,那麼要為關聯屬性設定一個別名!!注意:如果查詢的就是關聯屬性物件的id,這個時候物件資料庫中一般都有外來鍵,那麼hibernate查詢的時候就不需要使用inner join(內連線)額外地去另外一個表查詢,而是直接通過本表查詢,所以這種情況就不需要設定別名!!!

 detachedCriteria.createAlias("關聯屬性名", "別名"),請看示例:

“比如我在一個物件裡面有一個關聯屬性物件是region,我查詢的時候要查詢region的一個屬性值province。”

detachedCriteria.createAlias("region", "r");//為關聯屬性設定一個別名!!!
if(StringUtils.isNotBlank(province)) {
   detachedCriteria.add(Restrictions.like("r.province", "%"+province+"%"));
}

問題二:Hibernate獲取關聯屬性結果集

在實體中有一個關聯屬性的情況下,使用hibernate的離線detachedCriteria條件查詢的時候hibernate預設返回的結果集是兩個物件(多個關聯屬性就是多個物件),不是我們想期望的一個物件中巢狀關聯屬性物件,從而轉換成json的時候能得到我們想要的鍵值對結果。但是這種情況可能導致轉換成json後前臺獲取不到資料,因為前臺可能匹配的是"物件.屬性"的形式,而返回的json可能不是這樣的,反正我用的fastjson就出現過這個問題。所以我們要設定hibernate的返回結果集的格式,變成一個物件裡面巢狀該物件的關聯屬性物件

。程式碼如下:

int firstResult=(currentPage-1)*pageSize;
int maxResults=pageSize;
//設定hibernate的結果集為一個物件中巢狀關聯屬性物件,而不是包含多個物件(該物件和關聯屬性物件)
detachedCriteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY);
List findByCriteria2=this.getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults);