如何在 Hibernate 中为通用可滚动结果编写条件或 HQL?

How to write a criteria or HQL for generic scrollable results in Hibernate?

在我目前的批处理项目中,我需要编写一个条件或HQL来获取通用的可滚动结果,以便一个一个地处理实体。处理完成后,实体id将被保存为检查点,称为checkpointId。如果作业需要重新启动,则会创建另一个可滚动查询,并以 checkpointId 开始。在此批处理作业中,接受具有 @Id 的各种实体。

如果我翻译成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 );

但问题是:

我正在使用标准。如果HQL更简单,那么我可以接受HQL。 Hibernate 版本是 5x.

Class<?> entityType = MyClass.class;
ClassMetadata md = sessionFactory.getClassMetadata( entityType );
ScrollableResults scrollableResults = session
        .createCriteria( entityType )
        .setCacheable( false )
        .setFetchSize( 1 )
        .add( Restrictions.gt( md.getIdentifierPropertyName(), checkpointId ))
        .setMaxResults( maxResults )
        .scroll( ScrollMode.FORWARD_ONLY );