當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...