Methods Summary |
---|
private void | addReferencedColumn(Column column)
if ( !referencedColumns.contains(column) ) referencedColumns.add(column);
|
public void | addReferencedColumns(java.util.Iterator referencedColumnsIterator)
while ( referencedColumnsIterator.hasNext() ) {
Selectable col = (Selectable) referencedColumnsIterator.next();
if ( !col.isFormula() ) addReferencedColumn( (Column) col );
}
|
public void | alignColumns()Validates that columnspan of the foreignkey and the primarykey is the same.
Furthermore it aligns the length of the underlying tables columns.
if ( isReferenceToPrimaryKey() ) alignColumns(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() );
}
|
private void | appendColumns(java.lang.StringBuffer buf, java.util.Iterator columns)
while( columns.hasNext() ) {
Column column = (Column) columns.next();
buf.append( column.getName() );
if ( columns.hasNext() ) buf.append(",");
}
|
public java.util.List | getReferencedColumns()Returns the referenced columns if the foreignkey does not refer to the primary key
return referencedColumns;
|
public java.lang.String | getReferencedEntityName()
return referencedEntityName;
|
public Table | getReferencedTable()
return referencedTable;
|
public boolean | isCascadeDeleteEnabled()
return cascadeDeleteEnabled;
|
public boolean | isPhysicalConstraint()
return referencedTable.isPhysicalTable() &&
getTable().isPhysicalTable() &&
!referencedTable.hasDenormalizedTables();
|
public boolean | isReferenceToPrimaryKey()Does this foreignkey reference the primary key of the reference table
return referencedColumns.isEmpty();
|
public void | setCascadeDeleteEnabled(boolean cascadeDeleteEnabled)
this.cascadeDeleteEnabled = cascadeDeleteEnabled;
|
public void | setReferencedEntityName(java.lang.String referencedEntityName)
this.referencedEntityName = referencedEntityName;
|
public void | setReferencedTable(Table referencedTable)
//if( isReferenceToPrimaryKey() ) alignColumns(referencedTable); // TODO: possibly remove to allow more piecemal building of a foreignkey.
this.referencedTable = referencedTable;
|
public java.lang.String | sqlConstraintString(org.hibernate.dialect.Dialect dialect, java.lang.String constraintName, java.lang.String defaultCatalog, java.lang.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 java.lang.String | sqlDropString(org.hibernate.dialect.Dialect dialect, java.lang.String defaultCatalog, java.lang.String defaultSchema)
return "alter table " +
getTable().getQualifiedName(dialect, defaultCatalog, defaultSchema) +
dialect.getDropForeignKeyString() +
getName();
|
public java.lang.String | toString()
if(!isReferenceToPrimaryKey() ) {
StringBuffer result = new StringBuffer(getClass().getName() + '(" + getTable().getName() + getColumns() );
result.append( " ref-columns:" + '(" + getReferencedColumns() );
result.append( ") as " + getName() );
return result.toString();
}
else {
return super.toString();
}
|