if (elem.getTypeCode() != JavaTypes.PC || elem.isEmbeddedPC())
throw new MetaDataException(_loc.get("not-elem-relation", field));
// check for named inverse
FieldMapping mapped = field.getMappedByMapping();
ValueMappingInfo vinfo = elem.getValueInfo();
boolean criteria = vinfo.getUseClassCriteria();
OpenJPAConfiguration conf = field.getRepository().getConfiguration();
boolean isNonDefaultMappingAllowed = field.getRepository().
getMetaDataFactory().getDefaults().isNonDefaultMappingAllowed(conf);
// Bi-directional oneToMany relation with join table strategy
// ==> should not mapped in the owner's table
if (mapped != null) {
if (!field.isBiMTo1JT()) {
if (mapped.getElement().getTypeCode() != JavaTypes.PC) {
throw new MetaDataException(_loc.get("not-inv-relation-coll",
field, mapped));
}
field.getMappingInfo().assertNoSchemaComponents(field, !adapt);
vinfo.assertNoSchemaComponents(elem, !adapt);
mapped.resolve(mapped.MODE_META | mapped.MODE_MAPPING);
if (!mapped.isMapped() || mapped.isSerialized())
throw new MetaDataException(_loc.get("mapped-by-unmapped",
field, mapped));
field.setJoinForeignKey(mapped.getElementMapping().
getForeignKey(field.getDefiningMapping()));
elem.setForeignKey(mapped.getJoinForeignKey());
elem.setUseClassCriteria(criteria);
field.setOrderColumn(mapped.getOrderColumn());
return;
}
}
if (mapped == null || field.isBiMTo1JT()) {
if (field.isBiMTo1JT())
field.setBi1MJoinTableInfo();
field.mapJoin(adapt, true);
if (elem.getTypeMapping().isMapped()) {
ForeignKey fk = vinfo.getTypeJoin(elem, "element", false, adapt);
elem.setForeignKey(fk);
elem.setColumnIO(vinfo.getColumnIO());
} else
RelationStrategies.mapRelationToUnmappedPC(elem, "element", adapt);
elem.setUseClassCriteria(criteria);
elem.mapConstraints("element", adapt);