From: <hib...@li...> - 2006-04-28 00:55:26
|
Author: epbernard Date: 2006-04-27 20:55:24 -0400 (Thu, 27 Apr 2006) New Revision: 9825 Modified: trunk/Hibernate3/src/org/hibernate/mapping/Table.java Log: HHH-1704 deduplicate unique constraints per table Modified: trunk/Hibernate3/src/org/hibernate/mapping/Table.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/mapping/Table.java 2006-04-27 23:30:54 UTC (rev 9824) +++ trunk/Hibernate3/src/org/hibernate/mapping/Table.java 2006-04-28 00:55:24 UTC (rev 9825) @@ -200,11 +200,37 @@ } public Iterator getUniqueKeyIterator() { - return uniqueKeys.values().iterator(); + return getUniqueKeys().values().iterator(); } Map getUniqueKeys() { - return uniqueKeys; + if ( uniqueKeys.size() > 1) { + //deduplicate unique constraints sharing the same columns + //this is needed by Hibernate Annotations since it creates automagically + // unique constraints for the user + Iterator it = uniqueKeys.entrySet().iterator(); + Map finalUniqueKeys = new HashMap( uniqueKeys.size() ); + while ( it.hasNext() ) { + Map.Entry entry = (Map.Entry) it.next(); + UniqueKey uk = (UniqueKey) entry.getValue(); + List columns = uk.getColumns(); + int size = finalUniqueKeys.size(); + boolean skip = false; + Iterator tempUks = finalUniqueKeys.entrySet().iterator(); + while ( tempUks.hasNext() ) { + final UniqueKey currentUk = (UniqueKey) ( (Map.Entry) tempUks.next() ).getValue(); + if ( currentUk.getColumns().containsAll( columns ) && columns.containsAll( currentUk.getColumns() ) ) { + skip = true; + break; + } + } + if (! skip) finalUniqueKeys.put(entry.getKey(), uk); + } + return finalUniqueKeys; + } + else { + return uniqueKeys; + } } public void validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) { |