0
在我當前的批處理項目中,爲了獲得通用可滾動結果,我需要編寫一個條件或HQL,以便逐個處理實體。一旦處理完畢,實體ID將被保存爲檢查點,稱爲checkpointId
。如果作業需要重新啓動,則會創建另一個可滾動查詢,並將以checkpointId
開始。在這批作業中,接受各種具有@Id
的實體。如何在Hibernate中爲通用可滾動結果編寫條件或HQL?
如果我翻譯成SQL,它將類似於以下語句,其中FETCH NEXT
。
SELECT * FROM my_table WHERE id > checkpoint_id LIMIT 1
如果我在Java中實現它,就變成:
Class<?> entityType = MyClass.class;
ScrollableResults scrollableResults = session
.createCriteria(entityType)
.setCacheable(false)
.setFetchSize(1)
//
// TODO: where id > checkpointId
//
.setMaxResults(maxResults)
.scroll(ScrollMode.FORWARD_ONLY);
但問題是:
- 如何實現在Hibernate會話的
WHERE
條件? - 如何知道當前實體的標識符類型?
我在使用條件。如果HQL更容易,那麼我可以接受HQL。休眠版本是5x。