| Method from org.hibernate.engine.Versioning Detail: |
public static Object getVersion(Object[] fields,
EntityPersister persister) {
if ( !persister.isVersioned() ) {
return null;
}
return fields[ persister.getVersionProperty() ];
}
Extract the optimisitc locking value out of the entity state snapshot. |
public static Object increment(Object version,
VersionType versionType,
SessionImplementor session) {
Object next = versionType.next( version, session );
if ( log.isTraceEnabled() ) {
log.trace(
"Incrementing: " +
versionType.toLoggableString( version, session.getFactory() ) +
" to " +
versionType.toLoggableString( next, session.getFactory() )
);
}
return next;
}
Generate the next increment in the optimisitc locking value according
the VersionType contract for the version property. |
public static boolean isVersionIncrementRequired(int[] dirtyProperties,
boolean hasDirtyCollections,
boolean[] propertyVersionability) {
if ( hasDirtyCollections ) {
return true;
}
for ( int i = 0; i < dirtyProperties.length; i++ ) {
if ( propertyVersionability[ dirtyProperties[i] ] ) {
return true;
}
}
return false;
}
Do we need to increment the version number, given the dirty properties? |
public static boolean seedVersion(Object[] fields,
int versionProperty,
VersionType versionType,
SessionImplementor session) {
Object initialVersion = fields[versionProperty];
if (
initialVersion==null ||
// This next bit is to allow for both unsaved-value="negative"
// and for "older" behavior where version number did not get
// seeded if it was already set in the object
// TODO: shift it into unsaved-value strategy
( (initialVersion instanceof Number) && ( (Number) initialVersion ).longValue()< 0 )
) {
fields[versionProperty] = seed( versionType, session );
return true;
}
else {
if ( log.isTraceEnabled() ) {
log.trace( "using initial version: " + initialVersion );
}
return false;
}
}
Create an initial optimisitc locking value according the VersionType
contract for the version property if required and inject it into
the snapshot state. |
public static void setVersion(Object[] fields,
Object version,
EntityPersister persister) {
if ( !persister.isVersioned() ) {
return;
}
fields[ persister.getVersionProperty() ] = version;
}
Inject the optimisitc locking value into the entity state snapshot. |