{code:java} 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; } {code} I have tested the code above, it will create required audit tables and fill the audit tables with existing data as revision 1.
{color:red} The code above requires [hibernate-hydrate|https://github.com/arey/hibernate-hydrate] to run with {color}
|