private static void fillRevisionData(Configuration cfg) {
SessionFactory sessionFactory = cfg.buildSessionFactory();
List<Object> entities = getEntities(sessionFactory);
AuditEventListener listener = new AuditEventListener();
listener.initialize(cfg);
EventSource source = (EventSource) sessionFactory.openSession();
Transaction tx = source.beginTransaction();
for (Object entity : entities) {
EntityPersister persister = source.getEntityPersister(null, entity);
Object[] state = persister.getPropertyValuesToInsert(entity, null, source);
ClassMetadata metadata = sessionFactory.getClassMetadata(persister.getEntityName());
Serializable id = (Serializable) ReflectionUtils
.getFieldValue(entity, metadata.getIdentifierPropertyName());
PostInsertEvent event = new PostInsertEvent(entity, id, state, persister, source);
listener.onPostInsert(event);
}
tx.commit();
source.close();
}
private static List<Object> getEntities(SessionFactory sessionFactory) {
List<Object> entities = new ArrayList<Object>();
Session session = sessionFactory.openSession();
Map<String, ClassMetadata> allMetadata = sessionFactory.getAllClassMetadata();
for (String key : allMetadata.keySet()) {
ClassMetadata metadata = allMetadata.get(key);
Class<?> javaType = metadata.getMappedClass(EntityMode.POJO);
if (javaType.isAnnotationPresent(Audited.class)) {
Criteria criteria = session.createCriteria(metadata.getEntityName());
@SuppressWarnings("rawtypes")
List list = criteria.list();
for (Object entity : list) {
entity = LazyLoadingUtil.deepHydrate(session, entity);
entities.add(entity);
}
}
}
session.close();
return entities;
}