@Override public void overwriteLoadedStateCollectionValue(String propertyName, PersistentCollection collection) { // nothing to do if status is READ_ONLY if ( getStatus() != Status.READ_ONLY ) { assert propertyName != null; assert loadedState != null; final int propertyIndex = ( (UniqueKeyLoadable) persister ).getPropertyIndex( propertyName ); loadedState[propertyIndex] = collection; } }
@Override public boolean isReadOnly() { final Status status = getStatus(); if (status != Status.MANAGED && status != Status.READ_ONLY) { throw new HibernateException("instance was not in a valid state"); } return status == Status.READ_ONLY; }
@Override public void setStatus(Status status) { if ( status == Status.READ_ONLY ) { //memory optimization loadedState = null; } final Status currentStatus = this.getStatus(); if ( currentStatus != status ) { setCompressedValue( EnumState.PREVIOUS_STATUS, currentStatus ); setCompressedValue( EnumState.STATUS, status ); } }
@Override public void serialize(ObjectOutputStream oos) throws IOException { final Status previousStatus = getPreviousStatus(); oos.writeObject( getEntityName() ); oos.writeObject( id ); oos.writeObject( getStatus().name() ); oos.writeObject( (previousStatus == null ? "" : previousStatus.name()) ); // todo : potentially look at optimizing these two arrays oos.writeObject( loadedState ); oos.writeObject( getDeletedState() ); oos.writeObject( version ); oos.writeObject( getLockMode().toString() ); oos.writeBoolean( isExistsInDatabase() ); oos.writeBoolean( isBeingReplicated() ); }
@Override public boolean isNullifiable(boolean earlyInsert, SharedSessionContractImplementor session) { if ( getStatus() == Status.SAVING ) { return true; } else if ( earlyInsert ) { return !isExistsInDatabase(); } else { return session.getPersistenceContext().getNullifiableEntityKeys().contains( getEntityKey() ); } }
@Override public boolean isModifiableEntity() { final Status status = getStatus(); final Status previousStatus = getPreviousStatus(); return getPersister().isMutable() && status != Status.READ_ONLY && ! ( status == Status.DELETED && previousStatus == Status.READ_ONLY ); }
@Override public String toString() { return "EntityEntry" + MessageHelper.infoString( getPersister().getEntityName(), id ) + '(' + getStatus() + ')'; }
@Override public void postDelete() { setCompressedValue( EnumState.PREVIOUS_STATUS, getStatus() ); setCompressedValue( EnumState.STATUS, Status.GONE ); setCompressedValue( BooleanState.EXISTS_IN_DATABASE, false ); }
@Override public boolean isReadOnly() { final Status status = getStatus(); if (status != Status.MANAGED && status != Status.READ_ONLY) { throw new HibernateException("instance was not in a valid state"); } return status == Status.READ_ONLY; }
@Override public void setStatus(Status status) { if ( status == Status.READ_ONLY ) { //memory optimization loadedState = null; } final Status currentStatus = this.getStatus(); if ( currentStatus != status ) { setCompressedValue( EnumState.PREVIOUS_STATUS, currentStatus ); setCompressedValue( EnumState.STATUS, status ); } }
@Override public void overwriteLoadedStateCollectionValue(String propertyName, PersistentCollection collection) { // nothing to do if status is READ_ONLY if ( getStatus() != Status.READ_ONLY ) { assert propertyName != null; assert loadedState != null; final NonIdPersistentAttribute attribute = (NonIdPersistentAttribute) descriptor.findPersistentAttribute( propertyName ); final int propertyIndex = attribute.getStateArrayPosition(); loadedState[propertyIndex] = collection; } }
@Override public void serialize(ObjectOutputStream oos) throws IOException { final Status previousStatus = getPreviousStatus(); oos.writeObject( getEntityName() ); oos.writeObject( id ); oos.writeObject( getStatus().name() ); oos.writeObject( (previousStatus == null ? "" : previousStatus.name()) ); // todo : potentially look at optimizing these two arrays oos.writeObject( loadedState ); oos.writeObject( getDeletedState() ); oos.writeObject( version ); oos.writeObject( getLockMode().toString() ); oos.writeBoolean( isExistsInDatabase() ); oos.writeBoolean( isBeingReplicated() ); }
@Override public void postDelete() { setCompressedValue( EnumState.PREVIOUS_STATUS, getStatus() ); setCompressedValue( EnumState.STATUS, Status.GONE ); setCompressedValue( BooleanState.EXISTS_IN_DATABASE, false ); }
@Override public String toString() { return "EntityEntry" + MessageHelper.infoString( getDescriptor().getEntityName(), id ) + '(' + getStatus() + ')'; }
@Override public boolean isNullifiable(boolean earlyInsert, SharedSessionContractImplementor session) { if ( getStatus() == Status.SAVING ) { return true; } else if ( earlyInsert ) { return !isExistsInDatabase(); } else { return session.getPersistenceContext().getNullifiableEntityKeys().contains( getEntityKey() ); } }
@Override public boolean isModifiableEntity() { final Status status = getStatus(); final Status previousStatus = getPreviousStatus(); return getDescriptor().getHierarchy().getMutabilityPlan().isMutable() && status != Status.READ_ONLY && ! ( status == Status.DELETED && previousStatus == Status.READ_ONLY ); }