private boolean hasNullable(org.hibernate.mapping.UniqueKey uniqueKey) { final Iterator<org.hibernate.mapping.Column> iter = uniqueKey.columnIterator(); while ( iter.hasNext() ) { if ( iter.next().isNullable() ) { return true; } } return false; } }
protected String uniqueConstraintSql(UniqueKey uniqueKey) { final StringBuilder sb = new StringBuilder(); sb.append( "unique (" ); final Iterator<org.hibernate.mapping.Column> columnIterator = uniqueKey.columnIterator(); while ( columnIterator.hasNext() ) { final org.hibernate.mapping.Column column = columnIterator.next(); sb.append( column.getQuotedName( dialect ) ); if ( uniqueKey.getColumnOrderMap().containsKey( column ) ) { sb.append( " " ).append( uniqueKey.getColumnOrderMap().get( column ) ); } if ( columnIterator.hasNext() ) { sb.append( ", " ); } } return sb.append( ')' ).toString(); }
@Override public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { if ( hasNullable( uniqueKey ) ) { return org.hibernate.mapping.Index.buildSqlCreateIndexString( dialect, uniqueKey.getName(), uniqueKey.getTable(), uniqueKey.columnIterator(), uniqueKey.getColumnOrderMap(), true, metadata ); } else { return super.getAlterTableToAddUniqueKeyCommand( uniqueKey, metadata ); } }