/** * Will be called directly before an object will be saved. * * @param obj * @return id of the inserted objects if saved manually inside this method or null if the object * has to be saved by save method (default). */ public Serializable onBeforeSave(final Session session, final Object obj) { if (obj instanceof HistoryEntry) { final HistoryEntry entry = (HistoryEntry) obj; final Integer origEntityId = entry.getEntityId(); final String entityClassname = entry.getClassName(); final Serializable newId = getNewId(entityClassname, origEntityId); final List<PropertyDelta> delta = entry.getDelta(); Serializable id = null; if (newId != null) { // No public access, so try this: invokeHistorySetter(entry, "setEntityId", Integer.class, newId); } else { log.error( "Can't find mapping of old entity id. This results in a corrupted history: " + entry); } invokeHistorySetter(entry, "setDelta", List.class, null); id = save(entry); final List<PropertyDelta> list = new ArrayList<PropertyDelta>(); invokeHistorySetter(entry, "setDelta", List.class, list); for (final PropertyDelta deltaEntry : delta) { list.add(deltaEntry); save(deltaEntry); } this.historyEntries.add(entry); return id; } return null; }