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)"/>
</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();
转载于:https://blog.51cto.com/vcycyv/412951