You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/01/25 21:34:53 UTC

svn commit: r499954 - /incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/OpenEjb2CmpConversion.java

Author: dain
Date: Thu Jan 25 12:34:52 2007
New Revision: 499954

URL: http://svn.apache.org/viewvc?view=rev&rev=499954
Log:
Add converter for relationships using a join table

Modified:
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/OpenEjb2CmpConversion.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/OpenEjb2CmpConversion.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/OpenEjb2CmpConversion.java?view=diff&rev=499954&r1=499953&r2=499954
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/OpenEjb2CmpConversion.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/test/java/org/apache/openejb/jee/jpa/OpenEjb2CmpConversion.java Thu Jan 25 12:34:52 2007
@@ -129,7 +129,65 @@
                     field.getJoinColumn().add(joinColumn);
                 }
             } else {
-                // todo support many-to-many
+                JoinTable joinTable = new JoinTable();
+                joinTable.setName(relation.getManyToManyTableName());
+
+                //
+                // left
+                EjbRelationshipRoleType leftRole = roles.get(0);
+                RelationField left = null;
+                if (leftRole.getRelationshipRoleSource() != null) {
+                    String leftEjbName = leftRole.getRelationshipRoleSource().getEjbName();
+                    EntityData leftEntityData = entities.get(leftEjbName);
+                    if (leftEntityData == null) {
+                        // todo warn no such entity in ejb-jar.xml
+                        continue;
+                    }
+                    left = leftEntityData.relations.get(leftRole.getCmrField().getCmrFieldName());
+                }
+
+                if (left != null) {
+                    left.setJoinTable(joinTable);
+
+                    EjbRelationshipRoleType.RoleMapping roleMapping = leftRole.getRoleMapping();
+                    for (EjbRelationshipRoleType.RoleMapping.CmrFieldMapping cmrFieldMapping : roleMapping.getCmrFieldMapping()) {
+                        JoinColumn joinColumn = new JoinColumn();
+                        joinColumn.setName(cmrFieldMapping.getForeignKeyColumn());
+                        joinColumn.setReferencedColumnName(cmrFieldMapping.getKeyColumn());
+                        joinTable.getJoinColumn().add(joinColumn);
+                    }
+                }
+
+                //
+                // right
+                if (roles.size() > 1) {
+                    EjbRelationshipRoleType rightRole = roles.get(1);
+
+                    RelationField right = left.getRelatedField();
+                    if (right == null) {
+                        if (rightRole.getRelationshipRoleSource() != null) {
+                            String rightEjbName = rightRole.getRelationshipRoleSource().getEjbName();
+                            EntityData rightEntityData = entities.get(rightEjbName);
+                            if (rightEntityData == null) {
+                                // todo warn no such entity in ejb-jar.xml
+                                continue;
+                            }
+                            right = rightEntityData.relations.get(rightRole.getCmrField().getCmrFieldName());
+                        }
+                    }
+                    if (right != null) {
+                        if (left == null) {
+                            right.setJoinTable(joinTable);
+                        }
+                        EjbRelationshipRoleType.RoleMapping roleMapping = rightRole.getRoleMapping();
+                        for (EjbRelationshipRoleType.RoleMapping.CmrFieldMapping cmrFieldMapping : roleMapping.getCmrFieldMapping()) {
+                            JoinColumn joinColumn = new JoinColumn();
+                            joinColumn.setName(cmrFieldMapping.getForeignKeyColumn());
+                            joinColumn.setReferencedColumnName(cmrFieldMapping.getKeyColumn());
+                            joinTable.getInverseJoinColumn().add(joinColumn);
+                        }
+                    }
+                }
             }
         }
     }