hibernate criteria 多表關聯查詢

2021-08-08 16:42:47 字數 1763 閱讀 4953

當qbc criteria關聯查詢的時候一般都需要取別名。今天就遇到乙個問題

先貼**(修改之後正確的**):

@override

public searchresultfindlistpagebykeyword(integer page, integer pagesize, string keyword,

long airlinecompanyid, integer transfnum) else if (keyword.equals(string.valueof(constant.airticket.return_ticket))) else

} criteria.add(restrictions.eq("state", constant.airticket.state_pass));

if (airlinecompanyid != null)

if (transfnum != null && transfnum != constant.airticket.transf_unrestricted)

criteria.addorder(order.desc("id"));

long count = (long)criteria.setprojection(projections.rowcount()).uniqueresult();

list list = criteria.setprojection(null).setfirstresult((page - 1) * pagesize).setmaxresults(pagesize).list();

return new searchresult(count, list);

}

我需要進行模糊查詢機票和機場以及機場的城市的中英文名,這裡就是三張表了。

開始的時候一直報錯org.hibernate.queryexception: could not resolve property:......內容就是你關聯表的屬性名等資訊(id除外)

後面發現如果這樣三張表查詢的話就需要將第二張表取乙個別名,再將第三張表取別名進行聯合查詢。檢視原始碼還是是使用的inner join

原始碼:

@override

public criteria createalias(string associationpath, string alias)

@override

public criteria createalias(string associationpath, string alias, jointype jointype) throws hibernateexception

如果是n張表,我想大家應該不會用這樣的方式,當然這樣以此類推取別名我想應該也行得通,具體還沒實驗

如果不取別名,只能匹配型別的id,就像這樣:criteria.add(restrictions.eq("airlinecompany.id", airlinecompanyid));

2017-10-12 補充:

如果是進行id匹配查詢,建議不取別名。如果取別名會將別名那張表的那個id那行資料一起帶出來。導致不是我們想要的結果集。也會形成乙個陣列,但是裡面包含了2個物件,乙個我們想要查詢的物件和乙個關聯錶行對映的物件。

如果是非id關聯條件查詢,比如匹配另外一張表的name屬性查詢,取別名是可以的。這樣沒有條件查詢的id,就不會帶出來關聯表那行資料。

今天遇到了,匹配id取別名查詢,hibernate將關聯表id那行資料也查詢出來了,不是我們想要的結果。

記錄記錄,希望對大家有用!

Hibernate Criteria 關聯查詢

前面講了criteria看起來比hql順眼多了,接著繼續。如果每個美女都有自己的客戶資源 不要想歪了!那麼需要查詢擁有客戶gates的美女怎麼辦?使用criteria可以有兩種方法 1 detachedcriteria beautycriteria detachedcriteria.forclass...

hibernate ,criteria關聯查詢

關聯查詢可分為兩種 a 實體間有定義關聯關係的 一對多,多對一等 對已定義關聯關係的,我們可以使用createalias 來建立屬性的別名,然後引用別名進行條件查詢,如 criteria criteria session.createcriteria parent.class criteria.cr...

多表關聯查詢

表別名 多個表之間存在同名的列,則必須使用表明來限制列的引用 內連線 自連線 內連線就是關聯的兩張或多張表中,根據關聯條件,顯示所有匹配的記錄,匹配不上的,不顯示 自連線,就是把一張表取兩個別名,當做兩張表來使用,自己和自己關聯。select columns list from table name...