// create locking field
JDBCOptimisticLockingMetaData lockMetaData = metadata.getOptimisticLocking();
if(lockMetaData != null && lockMetaData.getLockingField() != null)
{
Integer strategy = lockMetaData.getLockingStrategy();
JDBCCMPFieldMetaData versionMD = lockMetaData.getLockingField();
versionField = getCMPFieldByName(versionMD.getFieldName());
boolean hidden = versionField == null;
if(strategy == JDBCOptimisticLockingMetaData.VERSION_COLUMN_STRATEGY)
{
if(hidden)
versionField = new JDBCLongVersionFieldBridge(manager, versionMD);
else
versionField = new JDBCLongVersionFieldBridge((JDBCCMP2xFieldBridge)versionField);
}
else if(strategy == JDBCOptimisticLockingMetaData.TIMESTAMP_COLUMN_STRATEGY)
{
if(hidden)
versionField = new JDBCTimestampVersionFieldBridge(manager, versionMD);
else
versionField = new JDBCTimestampVersionFieldBridge((JDBCCMP2xFieldBridge)versionField);
}
else if(strategy == JDBCOptimisticLockingMetaData.KEYGENERATOR_COLUMN_STRATEGY)
{
if(hidden)
versionField = new JDBCKeyGenVersionFieldBridge(
manager, versionMD, lockMetaData.getKeyGeneratorFactory());
else
versionField = new JDBCKeyGenVersionFieldBridge(
(JDBCCMP2xFieldBridge)versionField, lockMetaData.getKeyGeneratorFactory());
}
if(hidden)
addCMPField(versionField);
else
tableFields[versionField.getTableIndex()] = versionField;
}
// audit fields
JDBCAuditMetaData auditMetaData = metadata.getAudit();
if(auditMetaData != null)
{
JDBCCMPFieldMetaData auditField = auditMetaData.getCreatedPrincipalField();
if(auditField != null)
{
createdPrincipalField = getCMPFieldByName(auditField.getFieldName());
if(createdPrincipalField == null)
{
createdPrincipalField = new JDBCCMP2xFieldBridge(manager, auditField);
addCMPField(createdPrincipalField);
}
}
else
{
createdPrincipalField = null;
}
auditField = auditMetaData.getCreatedTimeField();
if(auditField != null)
{
createdTimeField = getCMPFieldByName(auditField.getFieldName());
if(createdTimeField == null)
{
createdTimeField = new JDBCCMP2xFieldBridge(manager, auditField, JDBCTypeFactory.EQUALS, false);
addCMPField(createdTimeField);
}
else
{
// just to override state factory and check-dirty-after-get
createdTimeField = new JDBCCMP2xFieldBridge(
(JDBCCMP2xFieldBridge)createdTimeField, JDBCTypeFactory.EQUALS, false);
tableFields[createdTimeField.getTableIndex()] = createdTimeField;
}
}
else
{
createdTimeField = null;
}
auditField = auditMetaData.getUpdatedPrincipalField();
if(auditField != null)
{
updatedPrincipalField = getCMPFieldByName(auditField.getFieldName());
if(updatedPrincipalField == null)
{
updatedPrincipalField = new JDBCCMP2xUpdatedPrincipalFieldBridge(manager, auditField);
addCMPField(updatedPrincipalField);
}
else
{
updatedPrincipalField = new JDBCCMP2xUpdatedPrincipalFieldBridge(
(JDBCCMP2xFieldBridge)updatedPrincipalField);
tableFields[updatedPrincipalField.getTableIndex()] = updatedPrincipalField;
}
}
else
{
updatedPrincipalField = null;
}
auditField = auditMetaData.getUpdatedTimeField();
if(auditField != null)
{
updatedTimeField = getCMPFieldByName(auditField.getFieldName());
if(updatedTimeField == null)
{
updatedTimeField = new JDBCCMP2xUpdatedTimeFieldBridge(manager, auditField);
addCMPField(updatedTimeField);
}