Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
ScrollableResults itemCursor =
    session.createQuery("from Item").scroll();
int count=0;
while ( itemCursor.next() ) {
    Item item = (Item) itemCursor.get(0);
    modifyItem(item);
    if ( ++count % 100 == 0 ) {
        session.flush();
        session.clear();
    }
}
tx.commit();
session.close();

 

filter:

<filter-def name="limitItemsByUserRank">
    <filter-param name="currentUserRank" type="int"/>
</filter-def>

 

<class name="Item" table="ITEM">
    ...
    <filter name="limitItemsByUserRank"
            condition=":currentUserRank >=
                       (select u.RANK from USER u
                        where u.USER_ID = SELLER_ID)"/&gt;
</class>

 

Filter filter = session.enableFilter("limitItemsByUserRank");
filter.setParameter("currentUserRank", loggedInUser.getRanking());

 

List<Item> filteredItems =
                session.createQuery("from Item").list();
List<Item> filteredItems =
                session.createCriteria(Item.class).list();

 

Interceptor:

1. Creating the marker interface and implement

package auction.model;
public interface Auditable {
    public Long getId();
}

public class Item implements Auditable { ... }

 

2.Creating and mapping the log record
Now  create  a  new  persistent  class,  AuditLogRecord.  This  class  represents  the
information you want to log in your audit database table:

public class AuditLogRecord {
    public String message;
    public Long entityId;
    public Class entityClass;
    public Long userId;
    public Date created;
    AuditLogRecord() {}
    public AuditLogRecord(String message,
                          Long entityId,
                          Class entityClass,
                          Long userId) {
        this.message = message;
        this.entityId = entityId;
        this.entityClass = entityClass;
        this.userId = userId;
        this.created = new Date();
    }
}

Next, map the class to table

<hibernate-mapping default-access="field">
<class name="persistence.audit.AuditLogRecord"
       table="AUDIT_LOG" mutable="false">

 

……

</class>
</hibernate-mapping>

3 write interceptor

public class AuditLogInterceptor extends EmptyInterceptor

postFlush(), onSave()  and  onFlushDirty()

4. enable the interceptor:

AuditLogInterceptor interceptor = new AuditLogInterceptor();
Session session = getSessionFactory().openSession(interceptor);
Transaction tx = session.beginTransaction();
interceptor.setSession(session);
interceptor.setUserId( currentUser.getId() );
session.save(newItem); // Triggers onSave() of the Interceptor
tx.commit();
session.close();