@Override public EntityReflector.PropertyReader getReader() { if (reader == null) { reader = getOwner().getReflector().getPropertyReader(getName()); } return reader; }
@Override public EntityReflector.PropertyWriter getWriter() { if (writer == null) { writer = getOwner().getReflector().getPropertyWriter(getName()); } return writer; } }
private void synchronizePersisterState(AbstractPreDatabaseOperationEvent event, Object[] state, EntityPersister persister, String[] propertyNames) { Object entity = event.getEntity(); EntityReflector reflector = persistentEntity.getReflector(); HashMap<Integer, Object> changedState= new HashMap<>(); EntityMetamodel entityMetamodel = persister.getEntityMetamodel(); for (int i = 0; i < propertyNames.length; i++) { String p = propertyNames[i]; Integer index = entityMetamodel.getPropertyIndexOrNull(p); if(index == null) continue; PersistentProperty property = persistentEntity.getPropertyByName(p); if (property == null) { continue; } String propertyName = property.getName(); if(GormProperties.VERSION.equals(propertyName)) { continue; } Object value = reflector.getProperty(entity, propertyName); if(state[index] != value) { changedState.put(i, value); } state[index] = value; } synchronizeEntityUpdateActionState(event, entity, changedState); }
private void activateDirtyChecking(Object entity) { if(entity instanceof DirtyCheckable && proxyHandler.isInitialized(entity)) { PersistentEntity persistentEntity = mappingContext.getPersistentEntity(Hibernate.getClass(entity).getName()); entity = proxyHandler.unwrap(entity); DirtyCheckable dirtyCheckable = (DirtyCheckable) entity; Map<String, Object> dirtyCheckingState = persistentEntity.getReflector().getDirtyCheckingState(entity); if(dirtyCheckingState == null) { dirtyCheckable.trackChanges(); for (Embedded association : persistentEntity.getEmbedded()) { if(DirtyCheckable.class.isAssignableFrom(association.getType())) { Object embedded = association.getReader().read(entity); if(embedded != null) { DirtyCheckable embeddedCheck = (DirtyCheckable) embedded; if(embeddedCheck.listDirtyPropertyNames().isEmpty()) { embeddedCheck.trackChanges(); } } } } } } }