in openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java [940:1017]
protected FieldStrategy defaultTypeStrategy(FieldMapping field,
boolean installHandlers, boolean adapting) {
switch (field.getTypeCode()) {
case JavaTypes.BOOLEAN:
case JavaTypes.BYTE:
case JavaTypes.CHAR:
case JavaTypes.DOUBLE:
case JavaTypes.FLOAT:
case JavaTypes.INT:
case JavaTypes.LONG:
case JavaTypes.SHORT:
return new PrimitiveFieldStrategy();
case JavaTypes.STRING:
if (!isClob(field, false))
return new StringFieldStrategy();
if (_dict.maxEmbeddedClobSize != -1)
return new MaxEmbeddedClobFieldStrategy();
break;
case JavaTypes.PC:
if (field.isEmbeddedPC())
return new EmbedFieldStrategy();
if (field.getTypeMapping().isMapped()
|| !useUntypedPCHandler(field))
return new RelationFieldStrategy();
break;
case JavaTypes.ARRAY:
case JavaTypes.COLLECTION:
ValueMapping elem = field.getElementMapping();
ValueHandler ehandler = namedHandler(elem);
if (ehandler == null)
ehandler = defaultHandler(elem);
if (ehandler != null)
return handlerCollectionStrategy(field, ehandler,
installHandlers);
if (elem.getTypeCode() == JavaTypes.PC
&& !elem.isSerialized() && !elem.isEmbeddedPC()) {
if (useInverseKeyMapping(field))
return new RelationCollectionInverseKeyFieldStrategy();
return new RelationCollectionTableFieldStrategy();
}
break;
case JavaTypes.MAP:
ValueMapping key = field.getKeyMapping();
ValueHandler khandler = namedHandler(key);
if (khandler == null)
khandler = defaultHandler(key);
ValueMapping val = field.getElementMapping();
ValueHandler vhandler = namedHandler(val);
if (vhandler == null)
vhandler = defaultHandler(val);
boolean krel = khandler == null
&& key.getTypeCode() == JavaTypes.PC
&& !key.isSerialized() && !key.isEmbeddedPC();
boolean vrel = vhandler == null
&& val.getTypeCode() == JavaTypes.PC
&& !val.isSerialized() && !val.isEmbeddedPC();
if (vrel && key.getValueMappedBy() != null) {
if (useInverseKeyMapping(field))
return new RelationMapInverseKeyFieldStrategy();
return new RelationMapTableFieldStrategy();
}
//TODO: in JPA 2.0 if MapKeyClass type is not specified
// an exception is thrown. In OpenJpa 1.x, the map will
// be serialized to a blob (the null value returned by
// this method will lead to a strategy to serialize
// the map).
if (!krel && khandler == null)
break;
if (!vrel && vhandler == null)
break;
return handlerMapStrategy(field, khandler, vhandler, krel,
vrel, installHandlers);
case JavaTypes.INPUT_STREAM:
case JavaTypes.INPUT_READER:
return new LobFieldStrategy();
}
return null;
}