HHH-8178 Natural IDs generate one UniqueKey for all columns

This commit is contained in:
Brett Meyer 2013-04-11 14:18:58 -04:00
parent d39272a280
commit 53f7b73adb
2 changed files with 15 additions and 2 deletions

View File

@ -2106,12 +2106,12 @@ public final class AnnotationBinder {
if ( naturalIdAnn != null ) {
if ( joinColumns != null ) {
for ( Ejb3Column column : joinColumns ) {
column.addUniqueKey( StringHelper.randomFixedLengthHex("UK_"), inSecondPass );
column.addUniqueKey( column.getTable().getNaturalIdUniqueKeyName(), inSecondPass );
}
}
else {
for ( Ejb3Column column : columns ) {
column.addUniqueKey( StringHelper.randomFixedLengthHex("UK_"), inSecondPass );
column.addUniqueKey( column.getTable().getNaturalIdUniqueKeyName(), inSecondPass );
}
}
}

View File

@ -69,6 +69,15 @@ public class Table implements RelationalModel, Serializable {
private boolean hasDenormalizedTables = false;
private String comment;
/**
* Natural ID columns must reside in one single UniqueKey within the Table.
* To prevent separate UniqueKeys from being created, this keeps track of
* a sole name used for all of them. It's necessary since
* AnnotationBinder#processElementAnnotations (static) creates the
* UniqueKeys on a second pass using randomly-generated names.
*/
private final String naturalIdUniqueKeyName = StringHelper.randomFixedLengthHex( "UK_" );
static class ForeignKeyKey implements Serializable {
String referencedClassName;
List columns;
@ -819,6 +828,10 @@ public class Table implements RelationalModel, Serializable {
return checkConstraints.iterator();
}
public String getNaturalIdUniqueKeyName() {
return naturalIdUniqueKeyName;
}
public Iterator sqlCommentStrings(Dialect dialect, String defaultCatalog, String defaultSchema) {
List comments = new ArrayList();
if ( dialect.supportsCommentOn() ) {