39 lines
1.5 KiB
Diff
39 lines
1.5 KiB
Diff
# UNDF: UNDF-2026-000000108
|
|
--- a/hibernate-core/src/main/java/org/hibernate/mapping/ForeignKey.java
|
|
+++ b/hibernate-core/src/main/java/org/hibernate/mapping/ForeignKey.java
|
|
@@ -6,6 +6,7 @@ package org.hibernate.mapping;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
+import java.util.LinkedHashSet;
|
|
import java.util.List;
|
|
|
|
import org.hibernate.Internal;
|
|
@@ -28,7 +29,12 @@ public class ForeignKey extends Constraint {
|
|
|
|
private Table referencedTable;
|
|
private String referencedEntityName;
|
|
private String keyDefinition;
|
|
private OnDeleteAction onDeleteAction;
|
|
- private final List<Column> referencedColumns = new ArrayList<>();
|
|
+ // hibernate-0002 fix: LinkedHashSet for O(1) contains() in addReferencedColumn().
|
|
+ // Previously ArrayList<Column>: addReferencedColumn() called contains() O(C)
|
|
+ // and addReferencedColumns(List) loops over the input list, giving O(C²).
|
|
+ // LinkedHashSet preserves insertion order for callers that iterate getReferencedColumns().
|
|
+ private final LinkedHashSet<Column> referencedColumnsSet = new LinkedHashSet<>();
|
|
private boolean creationEnabled = true;
|
|
|
|
@@ -170,9 +176,9 @@ public class ForeignKey extends Constraint {
|
|
|
|
private void addReferencedColumn(Column column) {
|
|
- if ( !referencedColumns.contains( column ) ) {
|
|
- referencedColumns.add( column );
|
|
- }
|
|
+ // O(1) with LinkedHashSet; was O(C) with ArrayList
|
|
+ referencedColumnsSet.add( column );
|
|
}
|
|
|
|
public List<Column> getReferencedColumns() {
|
|
- return referencedColumns;
|
|
+ return new ArrayList<>( referencedColumnsSet );
|
|
}
|