In a nutshell, in a CMR, it's possible for the foreign keys
and the related primary keys to be out of sync in the
SQL that creates the constraint.
I've included the two modified classes/snippets:
org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBri
dge (attached )
- added member relatedPrimaryKeyFields
- added method getRelatedPrimaryKeyFields
org.jboss.ejb.plugins.cmp.jdbc.JDBCStartCommand
(snippet below )
- modified addForeignKeyConstraint
(JDBCCMRFieldBridge cmrField) to call
cmrField.getRelatedPrimaryKeyFields() instead of
cmrField.getRelatedJDBCEntity().getPrimaryKeyFields()
** SNIPPET **
private void addForeignKeyConstraint
(JDBCCMRFieldBridge cmrField)
throws DeploymentException {
if(cmrField.getMetaData().hasForeignKeyConstraint
()) {
if(cmrField.getRelationMetaData
().isTableMappingStyle()) {
addForeignKeyConstraint(
cmrField.getRelationMetaData
().getDataSource(),
cmrField.getTableName(),
cmrField.getFieldName(),
cmrField.getTableKeyFields(),
cmrField.getEntity().getTableName(),
cmrField.getEntity().getPrimaryKeyFields());
} else if(cmrField.hasForeignKey()) {
addForeignKeyConstraint(
cmrField.getEntity().getDataSource(),
cmrField.getEntity().getTableName(),
cmrField.getFieldName(),
cmrField.getForeignKeyFields(),
cmrField.getRelatedJDBCEntity
().getTableName(),
cmrField.getRelatedPrimaryKeyFields());
}
} else {
log.debug("Foreign key constraint not added as
requested: " +
"relationshipRolename=" +
cmrField.getMetaData
().getRelationshipRoleName());
}
}
source