in openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java [839:935]
protected FieldStrategy defaultStrategy(FieldMapping field,
boolean installHandlers, boolean adapting) {
// not persistent?
if (field.getManagement() != FieldMetaData.MANAGE_PERSISTENT
|| field.isVersion())
return NoneFieldStrategy.getInstance();
if (field.getDefiningMapping().getStrategy() ==
NoneClassStrategy.getInstance())
return NoneFieldStrategy.getInstance();
// check for named handler first
ValueHandler handler = namedHandler(field);
if (handler != null) {
if (installHandlers)
field.setHandler(handler);
return new HandlerFieldStrategy();
}
// check for an explicitly mapped strategy
Object explicitStrat = mappedStrategy(field, field.getType(), adapting);
if (explicitStrat != null) {
if (explicitStrat instanceof FieldStrategy)
return (FieldStrategy) explicitStrat;
if (explicitStrat != null) {
if (installHandlers)
field.setHandler((ValueHandler) explicitStrat);
return new HandlerFieldStrategy();
}
}
if (field.isSerialized()) {
if (_dict.maxEmbeddedBlobSize != -1) {
handler = defaultHandler(field, adapting);
if (handler != null) {
if (installHandlers)
field.setHandler(handler);
}
return new MaxEmbeddedBlobFieldStrategy();
}
}
// check for known field strategies
if (!field.isSerialized() && (field.getType() == byte[].class
|| field.getType() == Byte[].class)) {
if (_dict.maxEmbeddedBlobSize != -1) {
handler = defaultHandler(field, adapting);
if (handler != null) {
if (installHandlers)
field.setHandler(handler);
}
return new MaxEmbeddedByteArrayFieldStrategy();
}
} else if (!field.isSerialized()
&& (field.getType() == char[].class
|| field.getType() == Character[].class)) {
if (_dict.maxEmbeddedClobSize != -1 && isClob(field, false)) {
handler = defaultHandler(field, adapting);
if (handler != null) {
if (installHandlers)
field.setHandler(handler);
}
return new MaxEmbeddedCharArrayFieldStrategy();
}
} else if (!field.isSerialized()) {
FieldStrategy strat = defaultTypeStrategy(field, installHandlers,
adapting);
if (strat != null) {
handler = defaultHandler(field, adapting);
if (handler != null) {
if (installHandlers)
field.setHandler(handler);
}
return strat;
}
}
// check for default handler
handler = defaultHandler(field, adapting);
if (handler != null) {
if (installHandlers)
field.setHandler(handler);
return new HandlerFieldStrategy();
}
// default to blob
if (installHandlers) {
if (getLog().isWarnEnabled())
getLog().warn(_loc.get("no-field-strategy", field));
field.setSerialized(true);
}
if (_dict.maxEmbeddedBlobSize == -1) {
if (installHandlers)
field.setHandler(BlobValueHandler.getInstance());
return new HandlerFieldStrategy();
}
return new MaxEmbeddedBlobFieldStrategy();
}