private void alignColumns(Table referencedTable) { final int referencedPkColumnSpan = referencedTable.getPrimaryKey().getColumnSpan(); if ( referencedPkColumnSpan != getColumnSpan() ) { StringBuilder sb = new StringBuilder(); sb.append( "Foreign key (" ).append( getName() ).append( ":" ) .append( getTable().getName() ) .append( " [" ); appendColumns( sb, getColumnIterator() ); sb.append( "])" ) .append( ") must have same number of columns as the referenced primary key (" ) .append( referencedTable.getName() ) .append( " [" ); appendColumns( sb, referencedTable.getPrimaryKey().getColumnIterator() ); sb.append( "])" ); throw new MappingException( sb.toString() ); } Iterator fkCols = getColumnIterator(); Iterator pkCols = referencedTable.getPrimaryKey().getColumnIterator(); while ( pkCols.hasNext() ) { ( (Column) fkCols.next() ).setLength( ( (Column) pkCols.next() ).getLength() ); } }
public boolean matches(ForeignKey fk) { if ( refTable.equalsIgnoreCase( fk.getReferencedTable().getName() ) ) { if ( fk.getColumnSpan() == references.size() ) { List fkRefs; if ( fk.isReferenceToPrimaryKey() ) { fkRefs = fk.getReferencedTable().getPrimaryKey().getColumns(); } else { fkRefs = fk.getReferencedColumns(); } for ( int i = 0; i < fk.getColumnSpan(); i++ ) { Column column = fk.getColumn( i ); Column ref = ( Column ) fkRefs.get( i ); if ( !hasReference( column, ref ) ) { return false; } } return true; } } return false; }
String defaultCatalog, String defaultSchema) { String[] columnNames = new String[getColumnSpan()]; String[] referencedColumnNames = new String[getColumnSpan()];
private void assertForeignKey(String foreignKeyName, String... columns) { Set<String> columnSet = new LinkedHashSet<>( Arrays.asList( columns ) ); for ( Namespace namespace : metadata().getDatabase().getNamespaces() ) { for ( org.hibernate.mapping.Table table : namespace.getTables() ) { Iterator<org.hibernate.mapping.ForeignKey> fkItr = table.getForeignKeyIterator(); while ( fkItr.hasNext() ) { org.hibernate.mapping.ForeignKey fk = fkItr.next(); if ( foreignKeyName.equals( fk.getName() ) ) { assertEquals( "ForeignKey column count not like expected", columnSet.size(), fk.getColumnSpan() ); List<String> columnNames = fk.getColumns().stream().map(Column::getName).collect(Collectors.toList()); assertTrue( "ForeignKey columns [" + columnNames + "] do not match expected columns [" + columnSet + "]", columnSet.containsAll( columnNames ) ); return; } } } } fail( "ForeignKey '" + foreignKeyName + "' could not be found!" ); }
final int numberOfColumns = foreignKey.getColumnSpan(); final String[] columnNames = new String[numberOfColumns]; final String[] targetColumnNames = new String[numberOfColumns];
protected void checkDefaultJoinColumnName( Class<?> ownerEntityClass, String ownerCollectionPropertyName, String ownerForeignKeyNameExpected) { final org.hibernate.mapping.Collection ownerCollection = metadata().getCollectionBinding( ownerEntityClass.getName() + '.' + ownerCollectionPropertyName ); // The default owner join column can only be computed if it has a PK with 1 column. assertEquals ( 1, ownerCollection.getOwner().getKey().getColumnSpan() ); assertEquals( ownerForeignKeyNameExpected, ownerCollection.getKey().getColumnIterator().next().getText() ); boolean hasOwnerFK = false; for ( Iterator it=ownerCollection.getCollectionTable().getForeignKeyIterator(); it.hasNext(); ) { final ForeignKey fk = (ForeignKey) it.next(); assertSame( ownerCollection.getCollectionTable(), fk.getTable() ); if ( fk.getColumnSpan() > 1 ) { continue; } if ( fk.getColumn( 0 ).getText().equals( ownerForeignKeyNameExpected ) ) { assertSame( ownerCollection.getOwner().getTable(), fk.getReferencedTable() ); hasOwnerFK = true; } } assertTrue( hasOwnerFK ); }
final ForeignKey fk = (ForeignKey) it.next(); assertSame( ownerCollection.getCollectionTable(), fk.getTable() ); if ( fk.getColumnSpan() > 1 ) { continue;
private List<Column> columnMatches(Column[] myPkColumns, int offset, ForeignKey key) { if(key.getColumnSpan()>(myPkColumns.length-offset)) { return null; // not enough columns in the key } List<Column> columns = new ArrayList<Column>(); for (int j = 0; j < key.getColumnSpan(); j++) { Column column = myPkColumns[j+offset]; if(!column.equals(key.getColumn(j))) { return null; } else { columns.add(column); } } return columns.isEmpty()?null:columns; }
private List<Column> columnMatches(Column[] myPkColumns, int offset, ForeignKey key) { if(key.getColumnSpan()>(myPkColumns.length-offset)) { return null; // not enough columns in the key } List<Column> columns = new ArrayList<Column>(); for (int j = 0; j < key.getColumnSpan(); j++) { Column column = myPkColumns[j+offset]; if(!column.equals(key.getColumn(j))) { return null; } else { columns.add(column); } } return columns.isEmpty()?null:columns; }
public String sqlConstraintString(Dialect dialect, String constraintName, String defaultCatalog, String defaultSchema) { String[] cols = new String[ getColumnSpan() ]; String[] refcols = new String[ getColumnSpan() ]; int i=0; Iterator refiter = referencedTable.getPrimaryKey().getColumnIterator(); Iterator iter = getColumnIterator(); while ( iter.hasNext() ) { cols[i] = ( (Column) iter.next() ).getQuotedName(dialect); refcols[i] = ( (Column) refiter.next() ).getQuotedName(dialect); i++; } String result = dialect.getAddForeignKeyConstraintString( constraintName, cols, referencedTable.getQualifiedName(dialect, defaultCatalog, defaultSchema), refcols ); return cascadeDeleteEnabled ? result + " on delete cascade" : result; }
public boolean matches(ForeignKey fk) { if ( refTable.equalsIgnoreCase( fk.getReferencedTable().getName() ) ) { if ( fk.getColumnSpan() == references.size() ) { List fkRefs; if ( fk.isReferenceToPrimaryKey() ) { fkRefs = fk.getReferencedTable().getPrimaryKey().getColumns(); } else { fkRefs = fk.getReferencedColumns(); } for ( int i = 0; i < fk.getColumnSpan(); i++ ) { Column column = fk.getColumn( i ); Column ref = ( Column ) fkRefs.get( i ); if ( !hasReference( column, ref ) ) { return false; } } return true; } } return false; }
private void alignColumns(Table referencedTable) { if ( referencedTable.getPrimaryKey().getColumnSpan()!=getColumnSpan() ) { StringBuffer sb = new StringBuffer(); sb.append("Foreign key (") .append( getName() + ":") .append( getTable().getName() ) .append(" ["); appendColumns( sb, getColumnIterator() ); sb.append("])") .append(") must have same number of columns as the referenced primary key (") .append( referencedTable.getName() ) .append(" ["); appendColumns( sb, referencedTable.getPrimaryKey().getColumnIterator() ); sb.append("])"); throw new MappingException( sb.toString() ); } Iterator fkCols = getColumnIterator(); Iterator pkCols = referencedTable.getPrimaryKey().getColumnIterator(); while ( pkCols.hasNext() ) { ( (Column) fkCols.next() ).setLength( ( (Column) pkCols.next() ).getLength() ); } }
private void alignColumns(Table referencedTable) { if ( referencedTable.getPrimaryKey().getColumnSpan()!=getColumnSpan() ) { StringBuffer sb = new StringBuffer(); sb.append("Foreign key (") .append( getName() + ":") .append( getTable().getName() ) .append(" ["); appendColumns( sb, getColumnIterator() ); sb.append("])") .append(") must have same number of columns as the referenced primary key (") .append( referencedTable.getName() ) .append(" ["); appendColumns( sb, referencedTable.getPrimaryKey().getColumnIterator() ); sb.append("])"); throw new MappingException( sb.toString() ); } Iterator fkCols = getColumnIterator(); Iterator pkCols = referencedTable.getPrimaryKey().getColumnIterator(); while ( pkCols.hasNext() ) { ( (Column) fkCols.next() ).setLength( ( (Column) pkCols.next() ).getLength() ); } }
public boolean matches(ForeignKey fk) { if ( refTable.equalsIgnoreCase( fk.getReferencedTable().getName() ) ) { if ( fk.getColumnSpan() == references.size() ) { List fkRefs; if ( fk.isReferenceToPrimaryKey() ) { fkRefs = fk.getReferencedTable().getPrimaryKey().getColumns(); } else { fkRefs = fk.getReferencedColumns(); } for ( int i = 0; i < fk.getColumnSpan(); i++ ) { Column column = fk.getColumn( i ); Column ref = ( Column ) fkRefs.get( i ); if ( !hasReference( column, ref ) ) { return false; } } return true; } } return false; }
private void alignColumns(Table referencedTable) { if ( referencedTable.getPrimaryKey().getColumnSpan()!=getColumnSpan() ) { StringBuffer sb = new StringBuffer(); sb.append("Foreign key (") .append( getName() + ":") .append( getTable().getName() ) .append(" ["); appendColumns( sb, getColumnIterator() ); sb.append("])") .append(") must have same number of columns as the referenced primary key (") .append( referencedTable.getName() ) .append(" ["); appendColumns( sb, referencedTable.getPrimaryKey().getColumnIterator() ); sb.append("])"); throw new MappingException( sb.toString() ); } Iterator fkCols = getColumnIterator(); Iterator pkCols = referencedTable.getPrimaryKey().getColumnIterator(); while ( pkCols.hasNext() ) { ( (Column) fkCols.next() ).setLength( ( (Column) pkCols.next() ).getLength() ); } }
public String sqlConstraintString(Dialect dialect, String constraintName, String defaultCatalog, String defaultSchema) { String[] cols = new String[ getColumnSpan() ]; String[] refcols = new String[ getColumnSpan() ]; int i=0; Iterator refiter = null; if(isReferenceToPrimaryKey() ) { refiter = referencedTable.getPrimaryKey().getColumnIterator(); } else { refiter = referencedColumns.iterator(); } Iterator iter = getColumnIterator(); while ( iter.hasNext() ) { cols[i] = ( (Column) iter.next() ).getQuotedName(dialect); refcols[i] = ( (Column) refiter.next() ).getQuotedName(dialect); i++; } String result = dialect.getAddForeignKeyConstraintString( constraintName, cols, referencedTable.getQualifiedName(dialect, defaultCatalog, defaultSchema), refcols, isReferenceToPrimaryKey() ); return cascadeDeleteEnabled && dialect.supportsCascadeDelete() ? result + " on delete cascade" : result; }
public String sqlConstraintString(Dialect dialect, String constraintName, String defaultCatalog, String defaultSchema) { String[] cols = new String[ getColumnSpan() ]; String[] refcols = new String[ getColumnSpan() ]; int i=0; Iterator refiter = null; if(isReferenceToPrimaryKey() ) { refiter = referencedTable.getPrimaryKey().getColumnIterator(); } else { refiter = referencedColumns.iterator(); } Iterator iter = getColumnIterator(); while ( iter.hasNext() ) { cols[i] = ( (Column) iter.next() ).getQuotedName(dialect); refcols[i] = ( (Column) refiter.next() ).getQuotedName(dialect); i++; } String result = dialect.getAddForeignKeyConstraintString( constraintName, cols, referencedTable.getQualifiedName(dialect, defaultCatalog, defaultSchema), refcols, isReferenceToPrimaryKey() ); return cascadeDeleteEnabled && dialect.supportsCascadeDelete() ? result + " on delete cascade" : result; }
public String sqlConstraintString(Dialect dialect, String constraintName, String defaultCatalog, String defaultSchema) { String[] cols = new String[ getColumnSpan() ]; String[] refcols = new String[ getColumnSpan() ]; int i=0; Iterator refiter = null; if(isReferenceToPrimaryKey() ) { refiter = referencedTable.getPrimaryKey().getColumnIterator(); } else { refiter = referencedColumns.iterator(); } Iterator iter = getColumnIterator(); while ( iter.hasNext() ) { cols[i] = ( (Column) iter.next() ).getQuotedName(dialect); refcols[i] = ( (Column) refiter.next() ).getQuotedName(dialect); i++; } String result = dialect.getAddForeignKeyConstraintString( constraintName, cols, referencedTable.getQualifiedName(dialect, defaultCatalog, defaultSchema), refcols, isReferenceToPrimaryKey() ); return cascadeDeleteEnabled && dialect.supportsCascadeDelete() ? result + " on delete cascade" : result; }
/** * Validates that columnspan of the foreignkey and the primarykey is the same. * * Furthermore it aligns the length of the underlying tables. * @param referencedTable */ private void alignColumns(Table referencedTable) { if ( referencedTable.getPrimaryKey().getColumnSpan()!=getColumnSpan() ) { StringBuffer sb = new StringBuffer(); sb.append("Foreign key (") .append( getName() + ":") .append( getTable().getName() ) .append(" ["); appendColumns( sb, getColumnIterator() ); sb.append("])") .append(") must have same number of columns as the referenced primary key (") .append( referencedTable.getName() ) .append(" ["); appendColumns( sb, referencedTable.getPrimaryKey().getColumnIterator() ); sb.append("])"); throw new MappingException( sb.toString() ); } Iterator fkCols = getColumnIterator(); Iterator pkCols = referencedTable.getPrimaryKey().getColumnIterator(); while ( pkCols.hasNext() ) { ( (Column) fkCols.next() ).setLength( ( (Column) pkCols.next() ).getLength() ); } }
@Test public void testMasterChild() { Assert.assertNotNull(HibernateUtil.getTable( metadata, JdbcUtil.toIdentifier(this, "MASTER"))); Table child = HibernateUtil.getTable( metadata, JdbcUtil.toIdentifier(this, "CHILD") ); Iterator<?> iterator = child.getForeignKeyIterator(); ForeignKey fk = (ForeignKey) iterator.next(); Assert.assertFalse("should only be one fk", iterator.hasNext() ); Assert.assertEquals(1, fk.getColumnSpan() ); Assert.assertSame( fk.getColumn(0), child.getColumn( new Column(JdbcUtil.toIdentifier(this, "MASTERREF")))); }