0
私の現在のバッチ処理プロジェクトでは、エンティティを1つずつ処理するために、一般的なスクロール可能な結果を取得するための基準または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です。