public ForeignKey createForeignKey( String keyName, List keyColumns, String referencedEntityName, String keyDefinition, List referencedColumns) { final ForeignKeyKey key = new ForeignKeyKey( keyColumns, referencedEntityName, referencedColumns ); ForeignKey fk = foreignKeys.get( key ); if ( fk == null ) { fk = new ForeignKey(); fk.setTable( this ); fk.setReferencedEntityName( referencedEntityName ); fk.setKeyDefinition(keyDefinition); fk.addColumns( keyColumns.iterator() ); if ( referencedColumns != null ) { fk.addReferencedColumns( referencedColumns.iterator() ); } // NOTE : if the name is null, we will generate an implicit name during second pass processing // after we know the referenced table name (which might not be resolved yet). fk.setName( keyName ); foreignKeys.put( key, fk ); } if ( keyName != null ) { fk.setName( keyName ); } return fk; }
@Override public void addReferencedColumns(List<? extends MappedColumn> referencedColumns) { addReferencedColumns( referencedColumns.iterator() ); }
public ForeignKey createForeignKey(String keyName, List keyColumns, String referencedEntityName, List referencedColumns) { Object key = new ForeignKeyKey( keyColumns, referencedEntityName, referencedColumns ); ForeignKey fk = (ForeignKey) foreignKeys.get( key ); if ( fk == null ) { fk = new ForeignKey(); if ( keyName != null ) { fk.setName( keyName ); } else { fk.setName( "FK" + uniqueColumnString( keyColumns.iterator(), referencedEntityName ) ); //TODO: add referencedClass to disambiguate to FKs on the same // columns, pointing to different tables } fk.setTable( this ); foreignKeys.put( key, fk ); fk.setReferencedEntityName( referencedEntityName ); fk.addColumns( keyColumns.iterator() ); if ( referencedColumns != null ) { fk.addReferencedColumns( referencedColumns.iterator() ); } } if ( keyName != null ) { fk.setName( keyName ); } return fk; }
public ForeignKey createForeignKey(String keyName, List keyColumns, String referencedEntityName, List referencedColumns) { Object key = new ForeignKeyKey( keyColumns, referencedEntityName, referencedColumns ); ForeignKey fk = (ForeignKey) foreignKeys.get( key ); if ( fk == null ) { fk = new ForeignKey(); if ( keyName != null ) { fk.setName( keyName ); } else { fk.setName( "FK" + uniqueColumnString( keyColumns.iterator(), referencedEntityName ) ); //TODO: add referencedClass to disambiguate to FKs on the same // columns, pointing to different tables } fk.setTable( this ); foreignKeys.put( key, fk ); fk.setReferencedEntityName( referencedEntityName ); fk.addColumns( keyColumns.iterator() ); if ( referencedColumns != null ) { fk.addReferencedColumns( referencedColumns.iterator() ); } } if ( keyName != null ) { fk.setName( keyName ); } return fk; }
static class ForeignKeyKey implements Serializable { String referencedClassName; List columns; List referencedColumns; ForeignKeyKey(List columns, String referencedClassName, List referencedColumns) { this.referencedClassName = referencedClassName; this.columns = new ArrayList(); this.columns.addAll( columns ); if ( referencedColumns != null ) { this.referencedColumns = new ArrayList(); this.referencedColumns.addAll( referencedColumns ); } else { this.referencedColumns = CollectionHelper.EMPTY_LIST; } } public int hashCode() { return columns.hashCode() + referencedColumns.hashCode(); } public boolean equals(Object other) { ForeignKeyKey fkk = (ForeignKeyKey) other; return fkk.columns.equals( columns ) && fkk.referencedClassName.equals( referencedClassName ) && fkk.referencedColumns .equals( referencedColumns ); } }