use of org.apache.openejb.jee.jpa.PrimaryKeyJoinColumn in project tomee by apache.
the class SunConversion method mergeEntityMappings.
public void mergeEntityMappings(final Map<String, EntityData> entities, final String moduleId, final EjbModule ejbModule, final EntityMappings entityMappings, final SunCmpMapping sunCmpMapping) {
for (final EntityMapping bean : sunCmpMapping.getEntityMapping()) {
final SunConversion.EntityData entityData = entities.get(moduleId + "#" + bean.getEjbName());
if (entityData == null) {
// todo warn no such ejb in the ejb-jar.xml
continue;
}
final Table table = new Table();
// table.setSchema(schema);
table.setName(bean.getTableName());
entityData.entity.setTable(table);
for (final org.apache.openejb.jee.sun.SecondaryTable sunSecondaryTable : bean.getSecondaryTable()) {
final SecondaryTable secondaryTable = new SecondaryTable();
secondaryTable.setName(sunSecondaryTable.getTableName());
for (final ColumnPair columnPair : sunSecondaryTable.getColumnPair()) {
SunColumnName localColumnName = new SunColumnName(columnPair.getColumnName().get(0), table.getName());
SunColumnName referencedColumnName = new SunColumnName(columnPair.getColumnName().get(1), table.getName());
// if user specified in reverse order, swap
if (localColumnName.table != null) {
final SunColumnName temp = localColumnName;
localColumnName = referencedColumnName;
referencedColumnName = temp;
}
final PrimaryKeyJoinColumn primaryKeyJoinColumn = new PrimaryKeyJoinColumn();
primaryKeyJoinColumn.setName(localColumnName.column);
primaryKeyJoinColumn.setReferencedColumnName(referencedColumnName.column);
secondaryTable.getPrimaryKeyJoinColumn().add(primaryKeyJoinColumn);
}
}
for (final CmpFieldMapping cmpFieldMapping : bean.getCmpFieldMapping()) {
final String fieldName = cmpFieldMapping.getFieldName();
final Field field = entityData.fields.get(fieldName);
if (field == null) {
// todo warn no such cmp-field in the ejb-jar.xml
continue;
}
final boolean readOnly = cmpFieldMapping.getReadOnly() != null;
for (final ColumnName columnName : cmpFieldMapping.getColumnName()) {
final SunColumnName sunColumnName = new SunColumnName(columnName, table.getName());
final Column column = new Column();
column.setTable(sunColumnName.table);
column.setName(sunColumnName.column);
if (readOnly) {
column.setInsertable(false);
column.setUpdatable(false);
}
field.setColumn(column);
}
// todo set fetch lazy when fetchWith is null
// FetchedWith fetchedWith = cmpFieldMapping.getFetchedWith();
}
for (final CmrFieldMapping cmrFieldMapping : bean.getCmrFieldMapping()) {
final String fieldName = cmrFieldMapping.getCmrFieldName();
cmrFieldMapping.getColumnPair();
final RelationField field = entityData.relations.get(fieldName);
if (field == null) {
// todo warn no such cmr-field in the ejb-jar.xml
continue;
}
if (field instanceof OneToOne) {
for (final ColumnPair columnPair : cmrFieldMapping.getColumnPair()) {
SunColumnName localColumnName = new SunColumnName(columnPair.getColumnName().get(0), table.getName());
SunColumnName referencedColumnName = new SunColumnName(columnPair.getColumnName().get(1), table.getName());
// if user specified in reverse order, swap
if (localColumnName.table != null) {
final SunColumnName temp = localColumnName;
localColumnName = referencedColumnName;
referencedColumnName = temp;
}
final boolean isFk = !entityData.hasPkColumnMapping(localColumnName.column);
if (isFk) {
// Make sure that the field with the FK is marked as the owning field
field.setMappedBy(null);
field.getRelatedField().setMappedBy(field.getName());
final JoinColumn joinColumn = new JoinColumn();
joinColumn.setName(localColumnName.column);
joinColumn.setReferencedColumnName(referencedColumnName.column);
field.getJoinColumn().add(joinColumn);
}
}
} else if (field instanceof OneToMany) {
// Bi-directional OneToMany do not have field mappings
if (!field.getRelatedField().isSyntheticField()) {
continue;
}
for (final ColumnPair columnPair : cmrFieldMapping.getColumnPair()) {
SunColumnName localColumnName = new SunColumnName(columnPair.getColumnName().get(0), table.getName());
SunColumnName otherColumnName = new SunColumnName(columnPair.getColumnName().get(1), table.getName());
// if user specified in reverse order, swap
if (localColumnName.table != null) {
final SunColumnName temp = localColumnName;
localColumnName = otherColumnName;
otherColumnName = temp;
}
final JoinColumn joinColumn = new JoinColumn();
// for OneToMany the join column name is the other (fk) column
joinColumn.setName(otherColumnName.column);
// and the referenced column is the local (pk) column
joinColumn.setReferencedColumnName(localColumnName.column);
field.getRelatedField().getJoinColumn().add(joinColumn);
}
} else if (field instanceof ManyToOne) {
for (final ColumnPair columnPair : cmrFieldMapping.getColumnPair()) {
SunColumnName localColumnName = new SunColumnName(columnPair.getColumnName().get(0), table.getName());
SunColumnName referencedColumnName = new SunColumnName(columnPair.getColumnName().get(1), table.getName());
// if user specified in reverse order, swap
if (localColumnName.table != null) {
final SunColumnName temp = localColumnName;
localColumnName = referencedColumnName;
referencedColumnName = temp;
}
final JoinColumn joinColumn = new JoinColumn();
joinColumn.setName(localColumnName.column);
joinColumn.setReferencedColumnName(referencedColumnName.column);
field.getJoinColumn().add(joinColumn);
}
} else {
// skip the non owning side
if (field.getMappedBy() != null) {
continue;
}
final JoinTable joinTable = new JoinTable();
field.setJoinTable(joinTable);
for (final ColumnPair columnPair : cmrFieldMapping.getColumnPair()) {
SunColumnName localColumnName = new SunColumnName(columnPair.getColumnName().get(0), table.getName());
SunColumnName joinTableColumnName = new SunColumnName(columnPair.getColumnName().get(1), table.getName());
if (localColumnName.table == null || joinTableColumnName.table == null) {
// if user specified in reverse order, swap
if (localColumnName.table != null) {
final SunColumnName temp = localColumnName;
localColumnName = joinTableColumnName;
joinTableColumnName = temp;
}
// join table is the table name of the referenced column
joinTable.setName(joinTableColumnName.table);
final JoinColumn joinColumn = new JoinColumn();
joinColumn.setName(joinTableColumnName.column);
joinColumn.setReferencedColumnName(localColumnName.column);
joinTable.getJoinColumn().add(joinColumn);
} else {
// if user specified in reverse order, swap
if (localColumnName.table.equals(joinTable.getName())) {
final SunColumnName temp = localColumnName;
localColumnName = joinTableColumnName;
joinTableColumnName = temp;
}
final JoinColumn joinColumn = new JoinColumn();
joinColumn.setName(joinTableColumnName.column);
joinColumn.setReferencedColumnName(localColumnName.column);
joinTable.getInverseJoinColumn().add(joinColumn);
}
}
}
}
}
}
Aggregations