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; }
final String referencingColumn = foreignKey.getColumn( 0 ).getName(); final String referencedTable = foreignKey.getReferencedTable().getName();
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 ); }
@Test @TestForIssue( jiraKey = "HHH-9327") public void testManyToManyForeignKeys() { final Collection ownerCollectionMapping = metadata.getCollectionBinding( Category.class.getName() + "." + "items" ); final String expectedOwnerFK = transformEntityName( Category.class.getName() ) + "_id"; final String expectedInverseFK = transformEntityName( Item.class.getName() ) + "_items_id"; boolean ownerFKFound = false; boolean inverseFKFound = false; for ( Iterator it = ownerCollectionMapping.getCollectionTable().getForeignKeyIterator(); it.hasNext(); ) { final String fkColumnName = ( (ForeignKey) it.next() ).getColumn( 0 ).getName(); if ( expectedOwnerFK.equals( fkColumnName ) ) { ownerFKFound = true; } else if ( expectedInverseFK.equals( fkColumnName ) ) { inverseFKFound = true; } } assertTrue( ownerFKFound ); assertTrue( inverseFKFound ); }
continue; if ( fk.getColumn( 0 ).getText().equals( ownerForeignKeyNameExpected ) ) { assertSame( ownerCollection.getOwner().getTable(), fk.getReferencedTable() ); hasOwnerFK = true; else if ( fk.getColumn( 0 ).getText().equals( inverseForeignKeyNameExpected ) ) { assertSame( associatedPersistentClass.getTable(), fk.getReferencedTable() ); hasInverseFK = true;
@Test public void testForeignKeyNameSetForMapsIdJoinColumn() { for ( Namespace namespace : metadata().getDatabase().getNamespaces() ) { for ( Table table : namespace.getTables() ) { if ( table.getName().equals( "Post" ) ) { Iterator<org.hibernate.mapping.ForeignKey> foreignKeyIterator = table.getForeignKeyIterator(); while ( foreignKeyIterator.hasNext() ) { org.hibernate.mapping.ForeignKey foreignKey = foreignKeyIterator.next(); if ( foreignKey.getColumn( 0 ).getName().equals( "PD_ID" ) ) { assertEquals( "FK_PD", foreignKey.getName() ); return; } } } } } fail( "Expected to find a Foreign Key mapped to column PD_ID but failed to locate it" ); } }
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; }
Column column = fk.getColumn( 0 ); if ( column.getName().equals( "explicit_native" ) ) { foundCount++;
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; }
/** * Convert a Hibernate foreign key object to a {@link ForeignKey} * @param mappedKey hibernate foreign key. * @param columnIndex 0-based index of the column in a foreign key. * @return a {@link ForeignKey} representation of the same foreign key. */ private ForeignKey convertForeignKey(org.hibernate.mapping.ForeignKey mappedKey, int columnIndex) { org.hibernate.mapping.Column column = mappedKey.getColumn(columnIndex); org.hibernate.mapping.Table table = mappedKey.getTable(); org.hibernate.mapping.Table referencedTable = mappedKey.getReferencedTable(); org.hibernate.mapping.Column referencedColumn; if (mappedKey.getReferencedColumns().size() == 0) { referencedColumn = referencedTable.getPrimaryKey().getColumn(columnIndex); } else { referencedColumn = (org.hibernate.mapping.Column) mappedKey.getReferencedColumns().get(columnIndex); } ForeignKey fkey = new ForeignKey(); fkey.setFkCatalogSchema(m_catalogSchema); fkey.setFkColumn(getColumnName(column)); fkey.setFkName(mappedKey.getName().toLowerCase()); fkey.setFkTable(getTableName(table)); fkey.setKeySeq(String.valueOf(DEFAULT_KEY_SEQ + columnIndex)); fkey.setPkCatalogSchema(m_catalogSchema); fkey.setPkColumn(getColumnName(referencedColumn)); fkey.setPkTable(getTableName(referencedTable)); return fkey; }
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; }
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; }
@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")))); }
@Test public void testMultiColumnForeignKeys() { Metadata metadata = metadataDescriptor.createMetadata(); Table table = HibernateUtil.getTable( metadata, JdbcUtil.toIdentifier(this, "LINE_ITEM")); Assert.assertNotNull(table); ForeignKey foreignKey = HibernateUtil.getForeignKey(table, JdbcUtil.toIdentifier(this, "TO_CUSTOMER_ORDER")); Assert.assertNotNull(foreignKey); Assert.assertEquals( reverseEngineeringStrategy.tableToClassName( new TableIdentifier(null, null, JdbcUtil.toIdentifier(this, "CUSTOMER_ORDER"))), foreignKey.getReferencedEntityName()); Assert.assertEquals(JdbcUtil.toIdentifier(this, "LINE_ITEM"), foreignKey.getTable().getName()); Assert.assertEquals(2, foreignKey.getColumnSpan()); Assert.assertEquals(foreignKey.getColumn(0).getName(), "CUSTOMER_ID_REF"); Assert.assertEquals(foreignKey.getColumn(1).getName(), "ORDER_NUMBER"); Table tab = HibernateUtil.getTable( metadata, JdbcUtil.toIdentifier(this, "CUSTOMER_ORDER")); Assert.assertEquals(tab.getPrimaryKey().getColumn(0).getName(), "CUSTOMER_ID"); Assert.assertEquals(tab.getPrimaryKey().getColumn(1).getName(), "ORDER_NUMBER"); PersistentClass lineMapping = metadata.getEntityBinding( reverseEngineeringStrategy .tableToClassName(new TableIdentifier(null, null, JdbcUtil.toIdentifier(this, "LINE_ITEM")))); Assert.assertEquals(4, lineMapping.getIdentifier().getColumnSpan()); Iterator<?> columnIterator = lineMapping.getIdentifier().getColumnIterator(); Assert.assertEquals(((Column) (columnIterator.next())).getName(), "CUSTOMER_ID_REF"); Assert.assertEquals(((Column) (columnIterator.next())).getName(), "ORDER_NUMBER"); }