in openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataSerializer.java [881:983]
private void serializeField(FieldMetaData fmd, FieldMetaData orig)
throws SAXException {
if (fmd.getManagement() != FieldMetaData.MANAGE_PERSISTENT
&& !fmd.isExplicit())
return;
addComments(fmd);
addAttribute("name", fmd.getName());
String strategy = null;
PersistenceStrategy strat = getStrategy(fmd);
ValueMetaData cascades = null;
if (fmd.isPrimaryKey() && strat == PersistenceStrategy.EMBEDDED)
strategy = "embedded-id";
else if (fmd.isPrimaryKey())
strategy = "id";
else if (fmd.isVersion())
strategy = "version";
else {
switch (strat) {
case TRANSIENT:
strategy = "transient";
break;
case BASIC:
if (isMetaDataMode())
addBasicAttributes(fmd);
strategy = "basic";
break;
case EMBEDDED:
strategy = "embedded";
break;
case MANY_ONE:
if (isMetaDataMode())
addManyToOneAttributes(fmd);
strategy = "many-to-one";
cascades = fmd;
break;
case ONE_ONE:
if (isMetaDataMode())
addOneToOneAttributes(fmd);
strategy = "one-to-one";
cascades = fmd;
break;
case ONE_MANY:
if (isMetaDataMode())
addOneToManyAttributes(fmd);
strategy = "one-to-many";
cascades = fmd.getElement();
break;
case MANY_MANY:
if (isMetaDataMode())
addManyToManyAttributes(fmd);
strategy = "many-to-many";
cascades = fmd.getElement();
break;
case ELEM_COLL:
if (isMetaDataMode())
addElementCollectionAttributes(fmd);
strategy = "element-collection";
break;
}
if (isMappingMode())
addStrategyMappingAttributes(fmd);
}
if (isMappingMode(fmd))
addFieldMappingAttributes(fmd, orig);
startElement(strategy);
if (fmd.getOrderDeclaration() != null) {
startElement("order-by");
if (!(Order.ELEMENT + " asc").equals(fmd.getOrderDeclaration()))
addText(fmd.getOrderDeclaration());
endElement("order-by");
} else if (isMappingMode(fmd)) {
serializeOrderColumn(fmd);
}
if (isMappingMode() && fmd.getKey().getValueMappedBy() != null) {
FieldMetaData mapBy = fmd.getKey().getValueMappedByMetaData();
if (!mapBy.isPrimaryKey() ||
mapBy.getDefiningMetaData().getPrimaryKeyFields().length != 1) {
addAttribute("name", fmd.getKey().getValueMappedBy());
}
startElement("map-key");
endElement("map-key");
}
if (isMappingMode(fmd))
serializeFieldMappingContent(fmd, strat);
if (cascades != null && isMetaDataMode())
serializeCascades(cascades);
if (isMappingMode() && strat == PersistenceStrategy.EMBEDDED) {
ClassMetaData meta = fmd.getEmbeddedMetaData();
ClassMetaData owner = getConfiguration().
getMetaDataRepositoryInstance().getMetaData
(meta.getDescribedType(), meta.getEnvClassLoader(), true);
FieldMetaData eorig;
for (FieldMetaData efmd : meta.getFields()) {
eorig = owner.getField(efmd.getName());
if (serializeAttributeOverride(efmd, eorig))
serializeAttributeOverrideContent(efmd, eorig);
}
}
endElement(strategy);
}