in openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java [1165:1342]
private void parseMemberAnnotations(FieldMetaData fmd) {
// look for persistence strategy in annotation table
Member member = getRepository().getMetaDataFactory().getDefaults().
getBackingMember(fmd);
PersistenceStrategy pstrat = PersistenceMetaDataDefaults.
getPersistenceStrategy(fmd, member);
if (pstrat == null)
return;
fmd.setExplicit(true);
AnnotatedElement el = (AnnotatedElement) member;
boolean lob = AccessController.doPrivileged(J2DoPrivHelper
.isAnnotationPresentAction(el, Lob.class));
if (isMetaDataMode()) {
switch (pstrat) {
case BASIC:
parseBasic(fmd, (Basic) el.getAnnotation(Basic.class), lob);
break;
case MANY_ONE:
parseManyToOne(fmd, (ManyToOne) el.getAnnotation
(ManyToOne.class));
break;
case ONE_ONE:
parseOneToOne(fmd, (OneToOne) el.getAnnotation
(OneToOne.class));
break;
case EMBEDDED:
parseEmbedded(fmd, (Embedded) el.getAnnotation
(Embedded.class));
break;
case ONE_MANY:
parseOneToMany(fmd, (OneToMany) el.getAnnotation
(OneToMany.class));
break;
case MANY_MANY:
parseManyToMany(fmd, (ManyToMany) el.getAnnotation
(ManyToMany.class));
break;
case PERS:
parsePersistent(fmd, (Persistent) el.getAnnotation
(Persistent.class));
break;
case PERS_COLL:
parsePersistentCollection(fmd, (PersistentCollection)
el.getAnnotation(PersistentCollection.class));
break;
case ELEM_COLL:
parseElementCollection(fmd, (ElementCollection)
el.getAnnotation(ElementCollection.class));
break;
case PERS_MAP:
parsePersistentMap(fmd, (PersistentMap)
el.getAnnotation(PersistentMap.class));
break;
case TRANSIENT:
break;
default:
throw new InternalException();
}
}
if (isMappingOverrideMode() && lob)
parseLobMapping(fmd);
// extensions
MetaDataTag tag;
for (Annotation anno : el.getDeclaredAnnotations()) {
tag = _tags.get(anno.annotationType());
if (tag == null) {
handleUnknownMemberAnnotation(fmd, anno);
continue;
}
switch (tag) {
case ACCESS:
parseAccess(fmd, (Access)anno);
break;
case FLUSH_MODE:
if (isMetaDataMode())
warnFlushMode(fmd);
break;
case GENERATED_VALUE:
if (isMappingOverrideMode())
parseGeneratedValue(fmd, (GeneratedValue) anno);
break;
case ID:
case EMBEDDED_ID:
fmd.setPrimaryKey(true);
break;
case MAPPED_BY_ID:
parseMapsId(fmd, (MapsId)anno);
break;
case MAP_KEY:
if (isMappingOverrideMode())
parseMapKey(fmd, (MapKey) anno);
break;
case MAP_KEY_CLASS:
if (isMappingOverrideMode())
parseMapKeyClass(fmd, (MapKeyClass) anno);
break;
case ORDER_BY:
parseOrderBy(fmd,
(OrderBy) el.getAnnotation(OrderBy.class));
break;
case SEQ_GENERATOR:
if (isMappingOverrideMode())
parseSequenceGenerator(el, (SequenceGenerator) anno);
break;
case VERSION:
fmd.setVersion(true);
break;
case DEPENDENT:
if (isMetaDataMode() && ((Dependent) anno).value())
fmd.setCascadeDelete(ValueMetaData.CASCADE_AUTO);
break;
case ELEM_DEPENDENT:
if (isMetaDataMode() && ((ElementDependent) anno).value())
fmd.getElement().setCascadeDelete
(ValueMetaData.CASCADE_AUTO);
break;
case ELEM_TYPE:
if (isMetaDataMode())
fmd.getElement().setTypeOverride(toOverrideType
(((ElementType) anno).value()));
break;
case EXTERNAL_VALS:
if (isMetaDataMode())
fmd.setExternalValues(StringUtil.join(((ExternalValues) anno).value(), ","));
break;
case EXTERNALIZER:
if (isMetaDataMode())
fmd.setExternalizer(((Externalizer) anno).value());
break;
case FACTORY:
if (isMetaDataMode())
fmd.setFactory(((Factory) anno).value());
break;
case INVERSE_LOGICAL:
if (isMetaDataMode())
fmd.setInverse(((InverseLogical) anno).value());
break;
case KEY_DEPENDENT:
if (isMetaDataMode() && ((KeyDependent) anno).value())
fmd.getKey()
.setCascadeDelete(ValueMetaData.CASCADE_AUTO);
break;
case KEY_TYPE:
if (isMetaDataMode())
fmd.getKey().setTypeOverride(toOverrideType(((KeyType)
anno).value()));
break;
case LOAD_FETCH_GROUP:
if (isMetaDataMode())
fmd.setLoadFetchGroup(((LoadFetchGroup) anno).value());
break;
case LRS:
if (isMetaDataMode())
fmd.setLRS(((LRS) anno).value());
break;
case READ_ONLY:
if (isMetaDataMode())
parseReadOnly(fmd, (ReadOnly) anno);
break;
case TYPE:
if (isMetaDataMode())
fmd.setTypeOverride(toOverrideType(((Type) anno).
value()));
break;
case CONVERT:
if (isMetaDataMode() && !((Convert) anno).disableConversion())
fmd.setConverter(((Convert) anno).converter());
break;
default:
throw new UnsupportedException(_loc.get("unsupported", fmd,
anno.toString()));
}
}
}