private void processExtendedClass(final Table table, final ClassMapping cm)
throws GeneratorException {
Object extendClass = cm.getExtends();
if (extendClass == null) { return; }
ClassMapping extendCm = (ClassMapping) extendClass;
String[] childIds = _mappingHelper.getClassMappingSqlIdentity(cm, false);
if (childIds.length != 0) {
// Check consistency.
String[] childTypes = _mappingHelper.resolveTypeReferenceForIds(cm);
String[] parentTypes = _mappingHelper.resolveTypeReferenceForIds(extendCm);
if (childTypes.length != parentTypes.length) {
throw new GeneratorException("Cannot resolve type for class '"
+ cm.getName() + "' from extend class '"
+ extendCm.getName() + "'");
}
for (int i = 0; i < childTypes.length; i++) {
if (!childTypes[i].equalsIgnoreCase(parentTypes[i])) {
throw new GeneratorException("Cannot resolve type for class '"
+ cm.getName() + "' from extend class '"
+ extendCm.getName() + "'");
}
}
return;
}
boolean isUseFieldIdentity = _mappingHelper.isUseFieldIdentity(extendCm);
Enumeration extendEf = extendCm.getClassChoice().enumerateFieldMapping();
// Process key generator.
String keygenerator = extendCm.getKeyGenerator();
KeyGenerator keyGen = null;
if (keygenerator != null) {
keyGen = _keyGenRegistry.getKeyGenerator(keygenerator.toUpperCase());
}
table.setKeyGenerator(keyGen);
while (extendEf.hasMoreElements()) {
FieldMapping extendFm = (FieldMapping) extendEf.nextElement();
// Skip if <sql> tag is not defined.
if (extendFm.getSql() == null) { continue; }
boolean isFieldIdentity = extendFm.getIdentity();
if (!isUseFieldIdentity) {
isFieldIdentity = _mappingHelper.isIdentity(extendCm, extendFm);
}
// Checke for many-key, many-table definition.
if (isFieldIdentity && extendFm.getSql().getManyKeyCount() <= 0) {
// Column is defiend as normal column in child, but it is id which is
// inherited from parent.
if (mergeIfDefInBothClasses(table, cm, extendFm)) { continue; }
String[] sqlnames = extendFm.getSql().getName();
String sqltype = extendFm.getSql().getType();
TypeInfo typeInfo = null;
ClassMapping cmRef = null;
String[] refIdTypes = null;
boolean isUseReferenceType = false;
if (sqltype != null) {
typeInfo = _typeMapper.getType(sqltype);