ScrollableResults is used to scroll large amount of data and ScrollMode provides different modes such as scrolling only in forward direction and sensitive/insensitive to changes in underlying data.
ScrollableResults can be used to paginate large amount of data because it provides methods to change current location for row iteration. Here I will provide ScrollableResults examples using createCriteria(), createQuery() and createSQLQuery() of org.hibernate.Session.
org.hibernate.ScrollableResults : Scrolls results by the given increments. The columns of the results start from zero. Find some methods of ScrollableResults.
scroll(int i) : Scrolls the results. i represents the number for forward or backward scrolling.
setRowNumber(int rowNumber) : It sets the current location in ScrollableResults.
get(int i) : Gets the object at index i in current row.
get() : It returns the array of Object of current rows
afterLast() : It sets the location just after the last result.
beforeFirst() : It sets the location just before the first result.
org.hibernate.ScrollMode is an Enum which provides the different mode to fetch ScrollableResults.
FORWARD_ONLY : It requests ScrollableResults that scrolls forward only.
SCROLL_SENSITIVE : ScrollableResults that is sensitive to changes in underlying data.
SCROLL_INSENSITIVE : Insensitive to changes in underlying data.
Data used in Example :

Jbkstudent.java
package com.javabykiran.hibernate;
// Generated Feb 24, 2020 2:00:10 PM by Hibernate Tools 5.2.12.Final
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * Jbkstudent generated by hbm2java
 */
@Entity
@Table(name = "jbkstudent")
public class Jbkstudent implements java.io.Serializable {
	private int sid;
	private String sname;
	public Jbkstudent() {
	}
	public Jbkstudent(int sid) {
            this.sid = sid;
	}
	public Jbkstudent(int sid, String sname) {
            this.sid = sid;
            this.sname = sname;
	}
	@Id
	@Column(name = "sid", unique = true, nullable = false)
	public int getSid() {
            return this.sid;
	}
	public void setSid(int sid) {
            this.sid = sid;
	}
	@Column(name = "sname", length = 45)
	public String getSname() {
            return this.sname;
	}
	public void setSname(String sname) {
            this.sname = sname;
	}
}
Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbk_hibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
    </session-factory>
</hibernate-configuration>
Scroll Results with Session.createCriteria()
JbkScrollableResultsWithCriteria.java
package com.javabykiran.hibernate;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class JbkScrollableResultsWithCriteria {
    public static void main(String[] args) {
        Configuration cfg = new Configuration();
        cfg.configure().addAnnotatedClass(Jbkstudent.class);
	SessionFactory sf = cfg.buildSessionFactory();
	Session session = sf.openSession();
	ScrollableResults sr = session.createCriteria(Jbkstudent.class).scroll(ScrollMode.FORWARD_ONLY);
        while (sr.next()) {
            Jbkstudent stu = (Jbkstudent) sr.get(0);
            System.out.println(stu.getSid() + " " + stu.getSname());
	}
	System.out.println("After Setting location");
	sr.setRowNumber(1);
	while (sr.next()) {
            Jbkstudent js = (Jbkstudent) sr.get(0);
            System.out.println(js.getSid() + " " + js.getSname());
	}
    }
}
    Output:
     Hibernate: select this_.sid as sid1_0_0_, this_.sname as sname2_0_0_ from jbkstudent this_
     1 JavaByKiran
     2 JavaByKiran
     3 JavaByKiran
     After Setting location
     3 JavaByKiran
                        Scroll Results with Session.createQuery()
JbkScrollableResultsWithQuery.java
package com.javabykiran.hibernate;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class JbkScrollableResultsWithQuery {
    public static void main(String[] args) {
        Configuration cfg = new Configuration();
        cfg.configure().addAnnotatedClass(Jbkstudent.class);
        SessionFactory sf = cfg.buildSessionFactory();
        Session session = sf.openSession();
        ScrollableResults sr = session.createQuery("from Jbkstudent").scroll(ScrollMode.SCROLL_INSENSITIVE);
        while (sr.next()) {
            Jbkstudent stu = (Jbkstudent) sr.get(0);
            System.out.println(stu.getSid() + " " + stu.getSname());
            sr.afterLast();
        }
    }
}
    Output:
     Hibernate: select jbkstudent0_.sid as sid1_0_, jbkstudent0_.sname as sname2_0_ from jbkstudent jbkstudent0_
     1 JavaByKiran
                        Scroll Results with Session.createSQLQuery()
JbkScrollableResultsWithSQLQuery.java
package com.javabykiran.hibernate;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class JbkScrollableResultsWithSQLQuery {
    public static void main(String[] args) {
	Configuration cfg = new Configuration();
	cfg.configure().addAnnotatedClass(Jbkstudent.class);
	SessionFactory sf = cfg.buildSessionFactory();
	Session session = sf.openSession();
        ScrollableResults sr = session.createSQLQuery("select sid,sname from Jbkstudent")
			       .scroll(ScrollMode.SCROLL_SENSITIVE);
	while (sr.next()) {
            Object row[] = sr.get();
            System.out.println(row[0] + " " + row[1]);
	}
	session.close();
    }
}
    Output:
     Hibernate: select sid,sname from Jbkstudent
     1 JavaByKiran
     2 JavaByKiran
     3 JavaByKiran