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; }
/** * Test key not found if tableinformation is missing. * * @throws NoSuchMethodException - error * @throws SecurityException - error * @throws IllegalAccessException - error * @throws IllegalArgumentException - error * @throws InvocationTargetException - error */ @Test public void testMissingTableInformation() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { // Get the private method Method method = AbstractSchemaMigrator.class.getDeclaredMethod( "checkForExistingForeignKey", ForeignKey.class, TableInformation.class ); method.setAccessible( true ); // foreignKey name with same name should match ForeignKey foreignKey = new ForeignKey(); foreignKey.setName( "objectId2id" ); boolean found = (boolean) method.invoke( new SchemaMigrator(), foreignKey, null ); Assert.assertFalse( "Key should not be found", found ); }
foreignKey.setName( "objectId2id" ); foreignKey.addColumn( new Column( "id" ) ); foreignKey.setReferencedTable( new Table( "table2" ) );
foreignKey.setName( "objectId2id_1" ); foreignKey.addColumn( new Column( "id" ) ); foreignKey.setReferencedTable( new Table( "table2" ) );
foreignKey.setName( "objectId2id_1" ); // Make sure the match is not successful based on key name foreignKey.addColumn( new Column( "id" ) ); foreignKey.setReferencedTable( new Table( "table2" ) );
foreignKey.setName( "objectId2id_1" ); // Make sure the match is not successful based on key name foreignKey.addColumn( new Column( "id" ) ); foreignKey.setReferencedTable( new Table( "table2" ) );
fk.setName( nameIdentifier.render( getDatabase().getJdbcEnvironment().getDialect() ) );
public UniqueKey getOrCreateUniqueKey(String keyName) { UniqueKey uk = (UniqueKey) uniqueKeys.get( keyName ); if ( uk == null ) { uk = new UniqueKey(); uk.setName( keyName ); uk.setTable( this ); uniqueKeys.put( keyName, uk ); } return uk; }
public ForeignKey createForeignKey(String keyName, List keyColumns, String referencedEntityName) { Object key = new ForeignKeyKey( keyColumns, referencedEntityName ); 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 ( 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; }
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 ); } }
AnnotationConfiguration configuration = ...; Iterator<Table> tables = configuration.getTableMappings(); ... Iterator<ForeignKey> keys = table.getForeignKeyIterator(); while ( keys.hasNext() ) { ForeignKey key = keys.next(); key.setName( ... ); } ... SchemaExport schemaExport = new SchemaExport( configuration ); schemaExport.setHaltOnError( true ); schemaExport.execute( false, true, false, true ); List exceptions = schemaExport.getExceptions(); ...