gdamour 2005/02/27 02:20:58
Modified: modules/openejb-builder/src/java/org/openejb/deployment
CMPEntityBuilder.java
Log:
GERONIMO-595.
Fix the way CMRField and EndTable are built in order to reflect the TranQL
API changes. These changes are required to support recursive CMR fields, i.e.
where a CMR is used to traverse from one Entity Bean to another having the
same type.
Revision Changes Path
1.19 +17 -11
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java
Index: CMPEntityBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- CMPEntityBuilder.java 20 Feb 2005 15:44:50 -0000 1.18
+++ CMPEntityBuilder.java 27 Feb 2005 07:20:58 -0000 1.19
@@ -57,6 +57,7 @@
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+
import javax.management.ObjectName;
import org.apache.geronimo.common.DeploymentException;
@@ -81,10 +82,10 @@
import org.openejb.xbeans.ejbjar.OpenejbEjbRelationType;
import org.openejb.xbeans.ejbjar.OpenejbEjbRelationshipRoleType;
import org.openejb.xbeans.ejbjar.OpenejbEntityBeanType;
-import
org.openejb.xbeans.ejbjar.OpenejbEntityBeanType.AutomaticKeyGeneration;
-import org.openejb.xbeans.ejbjar.OpenejbEntityBeanType.CmpFieldMapping;
import org.openejb.xbeans.ejbjar.OpenejbOpenejbJarType;
import org.openejb.xbeans.ejbjar.OpenejbQueryType;
+import
org.openejb.xbeans.ejbjar.OpenejbEntityBeanType.AutomaticKeyGeneration;
+import org.openejb.xbeans.ejbjar.OpenejbEntityBeanType.CmpFieldMapping;
import org.tranql.cache.GlobalSchema;
import org.tranql.cache.GlobalSchemaLoader;
import org.tranql.ejb.CMPField;
@@ -497,15 +498,19 @@
RoleInfo[] mappedRoleInfo = new RoleInfo[2];
if (roleInfo[0].equals(sourceRoleInfo)) {
mappedRoleInfo = roleInfo;
+ roleInfo[0].isOnPKSide |= true;
} else {
mappedRoleInfo[0] = roleInfo[1];
mappedRoleInfo[1] = roleInfo[0];
+ roleInfo[1].isOnPKSide |= true;
}
if ( role.isSetForeignKeyColumnOnSource() ) {
RoleInfo tmp = mappedRoleInfo[0];
mappedRoleInfo[0] = mappedRoleInfo[1];
mappedRoleInfo[1] = tmp;
+ roleInfo[0].isOnPKSide = !roleInfo[0].isOnPKSide;
+ roleInfo[1].isOnPKSide = !roleInfo[1].isOnPKSide;
}
Map pkToFkMap = new HashMap();
@@ -576,31 +581,31 @@
boolean isVirtual = null == roleInfo[0].cmrFieldName;
String endName0 = isVirtual ? "$VirtualEnd" + id :
roleInfo[0].cmrFieldName;
- roleInfo[0].ejb.addCMRField(new CMRField(endName0, roleInfo[1].ejb,
roleInfo[1].isOne, roleInfo[1].isCascadeDelete, relationship, isVirtual));
- roleInfo[0].table.addEndTable(new EndTable(endName0,
roleInfo[1].table, roleInfo[1].isOne, roleInfo[1].isCascadeDelete, joinTable,
isVirtual));
+ roleInfo[0].ejb.addCMRField(new CMRField(endName0, roleInfo[1].ejb,
roleInfo[1].isOne, roleInfo[1].isCascadeDelete, relationship, isVirtual,
roleInfo[0].isOnPKSide));
+ roleInfo[0].table.addEndTable(new EndTable(endName0,
roleInfo[1].table, roleInfo[1].isOne, roleInfo[1].isCascadeDelete, joinTable,
isVirtual, roleInfo[0].isOnPKSide));
isVirtual = null == roleInfo[1].cmrFieldName;
String endName1 = isVirtual ? "$VirtualEnd" + id :
roleInfo[1].cmrFieldName;
- roleInfo[1].ejb.addCMRField(new CMRField(endName1, roleInfo[0].ejb,
roleInfo[0].isOne, roleInfo[0].isCascadeDelete, relationship, isVirtual));
- roleInfo[1].table.addEndTable(new EndTable(endName1,
roleInfo[0].table, roleInfo[0].isOne, roleInfo[0].isCascadeDelete, joinTable,
isVirtual));
+ roleInfo[1].ejb.addCMRField(new CMRField(endName1, roleInfo[0].ejb,
roleInfo[0].isOne, roleInfo[0].isCascadeDelete, relationship, isVirtual,
roleInfo[1].isOnPKSide));
+ roleInfo[1].table.addEndTable(new EndTable(endName1,
roleInfo[0].table, roleInfo[0].isOne, roleInfo[0].isCascadeDelete, joinTable,
isVirtual, roleInfo[1].isOnPKSide));
if (null != mtmEntityName) {
EJB mtmEJB = ejbSchema.getEJB(mtmEntityName);
Relationship mtmRelationship = new
Relationship(relationship.getLeftJoinDefinition());
- mtmEJB.addCMRField(new CMRField(endName0, roleInfo[0].ejb, true,
false, mtmRelationship, true));
+ mtmEJB.addCMRField(new CMRField(endName0, roleInfo[0].ejb, true,
false, mtmRelationship, true, false));
mtmRelationship.addAssociationEnd(roleInfo[0].ejb.getAssociationEnd(endName0));
mtmRelationship = new
Relationship(relationship.getRightJoinDefinition());
- mtmEJB.addCMRField(new CMRField(endName1, roleInfo[1].ejb, true,
false, mtmRelationship, true));
+ mtmEJB.addCMRField(new CMRField(endName1, roleInfo[1].ejb, true,
false, mtmRelationship, true, false));
mtmRelationship.addAssociationEnd(roleInfo[1].ejb.getAssociationEnd(endName1));
Table mtmTable = sqlSchema.getTable(mtmEntityName);
JoinTable mtmJoinTable = new
JoinTable(joinTable.getLeftJoinDefinition());
- mtmTable.addEndTable(new EndTable(endName0, roleInfo[0].table,
true, false, mtmJoinTable, true));
+ mtmTable.addEndTable(new EndTable(endName0, roleInfo[0].table,
true, false, mtmJoinTable, true, false));
mtmJoinTable.addAssociationEnd(roleInfo[0].table.getAssociationEnd(endName0));
mtmJoinTable = new JoinTable(joinTable.getRightJoinDefinition());
- mtmTable.addEndTable(new EndTable(endName1, roleInfo[1].table,
true, false, mtmJoinTable, true));
+ mtmTable.addEndTable(new EndTable(endName1, roleInfo[1].table,
true, false, mtmJoinTable, true, false));
mtmJoinTable.addAssociationEnd(roleInfo[1].table.getAssociationEnd(endName1));
}
}
@@ -716,6 +721,7 @@
private Table table;
private boolean isOne;
private boolean isCascadeDelete;
+ private boolean isOnPKSide;
private JoinDefinition ejbJDef;
private JoinDefinition tableJDef;
private RoleInfo(String entityName, String cmrFieldName) {