Hi Tom
Here are code changes relevant for issues 668 and 716.
Issue 668: Java2DB generates FK for both sides of bi-directional
relationship
Issue 716: Java2DB does not generate the FK keys if PKjoinstrategy has
been defined
The code changes to resolve these issues are made to :
entity-persistence/src/java/oracle/toplink/essentials/tools/schemaframework/DefaultTableGenerator.java
- In case of Issue 668: if we have @OneToOne mapping defined on both
the classes, then we were generating FK constraints for both the
tables. Added logic to ensure that we define FK constraint on the owning
side side.
- Added 2 methods processAdditionalTablePkFields(..) &
addJoinColumnsFkFieldToFieldDefinition(..).
The primary key join strategy that might defined for a class can be
obtained from the classdescriptor using the
getAdditionalTablePrimaryKeyFields() method. Iterate over this list to
generate the appropriate FK constraints.
entity-persistence/src/java/oracle/toplink/essentials/tools/schemaframework/TableDefinition.java
- Issue 668:Ensure that we use the fully qualified name of the table
when generating the FK constrains.
Thanks
Pramod
Index: src/java/oracle/toplink/essentials/tools/schemaframework/DefaultTableGenerator.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/tools/schemaframework/DefaultTableGenerator.java,v
retrieving revision 1.9
diff -r1.9 DefaultTableGenerator.java
289a290
> processAdditionalTablePkFields(desc);
377a379,381
> if (!mapping.isForeignKeyRelationship())
> return;
>
399c403,404
< srcFldDef.setForeignKeyFieldName(dbTrgField.getTableName() + "." + dbTrgField.getName());
---
> srcFldDef.setForeignKeyFieldName(
> dbTrgField.getTable().getQualifiedName() + "." + dbTrgField.getName());
516a522
> fieldDef.setIsPrimaryKey(true);
518a525,550
>
> private void processAdditionalTablePkFields(ClassDescriptor desc) {
> DatabaseTable dbTbl = null;
> Iterator dbTblIter = desc.getTables().iterator();
> while (dbTblIter.hasNext()) {
> dbTbl = (DatabaseTable) dbTblIter.next();
> Map srcFields = (HashMap)desc.getAdditionalTablePrimaryKeyFields().get(dbTbl);
> if (null != srcFields)
> addJoinColumnsFkFieldToFieldDefinition(srcFields);
> }
> }
>
> private void addJoinColumnsFkFieldToFieldDefinition(final Map srcFields) {
> DatabaseField dbSrcField = null;
> DatabaseField dbTrgField = null;
>
> //add source foreign key fields into the table
> for (Iterator srcFkFields = srcFields.keySet().iterator(); srcFkFields.hasNext();) {
> dbSrcField = (DatabaseField)srcFkFields.next();
> dbTrgField = (DatabaseField)srcFields.get(dbSrcField);
> FieldDefinition srcFldDef = (FieldDefinition)fieldMap.get(dbSrcField);
> FieldDefinition trgFldDef = (FieldDefinition)fieldMap.get(dbTrgField);
> trgFldDef.setForeignKeyFieldName(
> dbSrcField.getTable().getQualifiedName() + "." + dbSrcField.getName());
> }
> }
Index: src/java/oracle/toplink/essentials/tools/schemaframework/TableDefinition.java
===================================================================
RCS file: /cvs/glassfish/entity-persistence/src/java/oracle/toplink/essentials/tools/schemaframework/TableDefinition.java,v
retrieving revision 1.4
diff -r1.4 TableDefinition.java
412c412
< fkConstraint.setTargetTable(tempTargetField.getTableName());
---
> fkConstraint.setTargetTable(tempTargetField.getTable().getQualifiedName());