亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何限制休眠條件 API 獲得的結果?

如何限制休眠條件 API 獲得的結果?

絕地無雙 2023-06-21 14:46:23
假設我們有一個 Person 類,它是一個簡單的休眠實體。我們有一個 DAO,它有一個方法可以檢索名稱列表中列出的所有 Person 行:@Transactionalpublic List<Person> getPersons(List<String> personNames) {ArrayList<Criterion> locationCriterions = new ArrayList<Criterion>();if(personNames == null) {       return new ArrayList<Person>();}Criterion [] arrayOfPersonCriterions = new Criterion [personNames.size()];   int currentIndex = 0;   for(String currentPersonName : personNames) {      arrayOfPersonCriterions[currentIndex](Restrictions.eq("name",    currentPersonName));   currentIndex++;   }        Criterion personFinalCriterion = Restrictions.or(arrayOfPersonCriterions);   Session currentSession = sessionFactory.getCurrentSession();   Criteria criteria = currentSession.createCriteria(Person.class);   return (List<Person>)criteria.add(personFinalCriterion).list();} 問題:如何限制檢索結果的數量——就像在 SQL 中我們可以使用 LIMIT X, Y 查詢文本一樣?請注意:我想使用 Criteria API 并避免本機查詢 - 我可以使用本機查詢但一般不想擺脫 Criteria,避免處理返回的列表,以便它只返回我認為無意義且效率低下的結果范圍。
查看完整描述

2 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

您可以設置使用setFirstResult跳過記錄并setMaxResults從該點獲取記錄數。


Criteria criteria = session.createCriteria(Foo.class);

criteria.setFirstResult(0);

criteria.setMaxResults(pageSize);

List<Foo> firstPage = criteria.list();


查看完整回答
反對 回復 2023-06-21
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

您可以使用以下兩種方法Criteria


criteria.setFirstResult(indexOfTheFirstRecord)指定第一條記錄(從0開始) criteria.setMaxResults(numberOfTheRecords)指定記錄數


為了簡單起見,您可以使用此類


public class Pagination {


    public static final Pagination EMPTY = new Pagination(0, 0);


    /** Page index, begins from 0. */

    private final int pageIndex;


    /** Objects on page count. */

    private final int pageSize;


    public Pagination(int pageIndex, int pageSize) {

        this.pageIndex = pageIndex;

        this.pageSize = pageSize;

    }


    public void addToCriteria(Criteria criteria) {

        if (this == EMPTY) {

            return;

        }

        criteria.setMaxResults(pageSize);

        criteria.setFirstResult(pageIndex * pageSize);

    }


}

例子


獲取pageIndex = 1大小為 10 的第二頁 ( )(帶有startIndex = 10,的記錄endIndex = 19)


final int pageIndex = 1;

Pagination pagination = new Pagination(pageIndex, 10);

pagination.addToCriteria(criteria);


查看完整回答
反對 回復 2023-06-21
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號