hibernate多表連線查詢,主表分頁的實現

2021-06-18 08:29:13 字數 1479 閱讀 5815

第一步:查詢資料的總數

session s = hibernatesessionfactory.getsession();

detachedcriteria idsonlycriteria = detachedcriteria.forclass(

category.class, "c");

//hibernate多表連線查詢,主表分頁的實現。

idsonlycriteria.createalias("products", "p");

idsonlycriteria.add(restrictions.gt("p.createtime", dateutils.parse(

"2013-04-20 08:53:28", dateutils.date_fmt_str)));

idsonlycriteria.setprojection(projections.countdistinct("id"));

int total = ((number) idsonlycriteria.getexecutablecriteria(s).list()

.get(0)).intvalue();

第二步:查詢滿足條件的id的列表資訊,加上分頁

idsonlycriteria.setprojection(projections.distinct(projections.id()));

idsonlycriteria.addorder(order.asc("c.id"));

listidlist = idsonlycriteria.getexecutablecriteria(s)

.setfirstresult(0).setmaxresults(3).list();

第三步:重新構建查詢語句,使用in進行查詢

criteria criteria = s.createcriteria(category.class, "c");

criteria.createalias("products", "p");

criteria.add(restrictions.gt("p.createtime", dateutils.parse(

"2013-04-20 08:53:28", dateutils.date_fmt_str)));

criteria.add(restrictions.in("c.id", idlist));

criteria.setfetchmode("products", fetchmode.join);

criteria.addorder(order.asc("c.id"));

第四步:保證distinct,讓hibernate自動封裝返回的資料到各個欄位中

criteria.setresulttransformer(detachedcriteria.distinct_root_entity);

listresultlist = criteria.list();

for (category category : resultlist) }

hibernate多表查詢

在沒有使用select的時候,返回的是乙個 student物件,否則返回的是乙個物件陣列 object ilist userlist session.find from testmssql.student as student where student.name 張三 nhibernate.nhi...

HIbernate多表操作(連線)

public class hqljointest session.gettransaction commit session.close 隱式內連線 test public void test2 迫切內連線 迫切內連線得到的結果是直接封裝到po類中,而內連線得到的是object陣列,陣列中封裝的是p...

Hibernate之多表查詢

原生sql多表查詢 1.交叉連線 笛卡爾積 select from a,b 2.內連線 1 隱式內連線 select from a,b where b.aid a.id 2 顯示內連線 select from a inner join b on b.aid a.id 3.外鏈結 1 左外連線 sel...