public static List<Trade> getOldVersionList(Trade trade) { Session session = HibernateUtil.getSession(); List<Trade> result = new ArrayList<>(); try { if (trade != null) { result.add(trade); AuditReader reader = AuditReaderFactory.get(session); List<Object[]> prior_revision = (List<Object[]>) reader .createQuery() .forRevisionsOfEntity(trade.getClass(), false, true) .add(AuditEntity.property("tradeVersion").lt(trade.getTradeVersion())) .add(AuditEntity.id().eq(trade.getId())) .addOrder(AuditEntity.revisionNumber().desc()) .getResultList(); for (Object[] objects : prior_revision) { Trade version = (Trade) objects[0]; unProxyObject(version); result.add(version); } } } catch (ClassNotFoundException | IllegalAccessException | HibernateException | IllegalArgumentException | InvocationTargetException e) { logger.error(StringUtils.formatErrorMessage(e)); } finally { session.close(); } return result; }
public static Trade getPreviousVersion(Trade entity) { Session session = HibernateUtil.getSession(); Trade trade = null; try { List<Trade> oldVersionList = getOldVersionList(entity); if (!oldVersionList.isEmpty()) { trade = oldVersionList.get(0); } if (trade != null) { unProxyObject(trade); } } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | HibernateException | ClassNotFoundException e) { logger.error(StringUtils.formatErrorMessage(e)); } finally { session.close(); } return trade; }