Skip to content

Commit d2b4b3a

Browse files
gavinkingmbellade
authored andcommitted
clean up handling of ForeignKey access from Table
(cherry picked from commit 8fb6a0e)
1 parent 0d9dd2d commit d2b4b3a

27 files changed

+101
-121
lines changed

hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1941,7 +1941,7 @@ protected void secondPassCompileForeignKeys(Table table, Set<ForeignKey> done, M
19411941
table.createForeignKeys( buildingContext );
19421942

19431943
final Dialect dialect = getDatabase().getJdbcEnvironment().getDialect();
1944-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
1944+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
19451945
if ( !done.contains( foreignKey ) ) {
19461946
done.add( foreignKey );
19471947
final PersistentClass referencedClass = foreignKey.resolveReferencedClass(this);

hibernate-core/src/main/java/org/hibernate/boot/internal/MetadataImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ private void handleUDT(UserDefinedType userDefinedType, ColumnOrderingStrategy c
408408
}
409409

410410
private void handleForeignKeys(Table table, ColumnOrderingStrategy columnOrderingStrategy) {
411-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
411+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
412412
final List<Column> columns = foreignKey.getColumns();
413413
if ( columns.size() > 1 ) {
414414
if ( foreignKey.getReferencedColumns().isEmpty() ) {

hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialectTableExporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public String[] getSqlCreateStrings(Table table, Metadata metadata, SqlStringGen
5353
// a typical table that corresponds to an entity type
5454
keyColumns = table.getPrimaryKey().getColumns();
5555
}
56-
else if ( !table.getForeignKeys().isEmpty() ) {
56+
else if ( !table.getForeignKeyCollection().isEmpty() ) {
5757
// a table with no PK's but has FK's; often corresponds to element collection properties
5858
keyColumns = table.getColumns();
5959
}

hibernate-core/src/main/java/org/hibernate/mapping/DenormalizedTable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public DenormalizedTable(
6060
@Override
6161
public void createForeignKeys(MetadataBuildingContext context) {
6262
includedTable.createForeignKeys( context );
63-
for ( ForeignKey foreignKey : includedTable.getForeignKeys().values() ) {
63+
for ( ForeignKey foreignKey : includedTable.getForeignKeyCollection() ) {
6464
final PersistentClass referencedClass =
6565
foreignKey.resolveReferencedClass( context.getMetadataCollector() );
6666
// the ForeignKeys created in the first pass did not have their referenced table initialized

hibernate-core/src/main/java/org/hibernate/mapping/Table.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Objects;
1616
import java.util.function.Function;
1717

18+
import org.hibernate.Incubating;
1819
import org.hibernate.Internal;
1920
import org.hibernate.MappingException;
2021
import org.hibernate.boot.model.naming.Identifier;
@@ -32,6 +33,7 @@
3233

3334
import static java.util.Collections.emptyList;
3435
import static java.util.Collections.singletonList;
36+
import static java.util.Collections.unmodifiableCollection;
3537
import static java.util.Collections.unmodifiableList;
3638
import static java.util.Collections.unmodifiableMap;
3739
import static java.util.stream.Collectors.toList;
@@ -318,6 +320,15 @@ public Map<String, Index> getIndexes() {
318320
return unmodifiableMap( indexes );
319321
}
320322

323+
@Incubating
324+
public Collection<ForeignKey> getForeignKeyCollection() {
325+
return unmodifiableCollection( foreignKeys.values() );
326+
}
327+
328+
/**
329+
* @deprecated because {@link ForeignKeyKey} should be private.
330+
*/
331+
@Deprecated(since = "7", forRemoval = true)
321332
public Map<ForeignKeyKey, ForeignKey> getForeignKeys() {
322333
return unmodifiableMap( foreignKeys );
323334
}
@@ -592,6 +603,8 @@ public ForeignKey createForeignKey(
592603
for ( Column keyColumn : keyColumns ) {
593604
foreignKey.addColumn( keyColumn );
594605
}
606+
607+
// null referencedColumns means a reference to primary key
595608
if ( referencedColumns != null ) {
596609
foreignKey.addReferencedColumns( referencedColumns );
597610
}
@@ -611,16 +624,16 @@ public ForeignKey createForeignKey(
611624
}
612625

613626
/**
614-
* Checks for uniqueKey containing only whole primary key and sets
615-
* order of the columns accordingly
627+
* Checks for unique key containing only whole primary key and sets
628+
* order of the columns accordingly
616629
*/
617630
private void checkPrimaryKeyUniqueKey() {
618-
final Iterator<Map.Entry<String,UniqueKey>> uniqueKeyEntries = uniqueKeys.entrySet().iterator();
631+
final var uniqueKeyEntries = uniqueKeys.entrySet().iterator();
619632
while ( uniqueKeyEntries.hasNext() ) {
620-
final Map.Entry<String,UniqueKey> uniqueKeyEntry = uniqueKeyEntries.next();
621-
622-
if ( isSameAsPrimaryKeyColumns( uniqueKeyEntry.getValue() ) ) {
623-
primaryKey.setOrderingUniqueKey(uniqueKeyEntry.getValue());
633+
final var uniqueKeyEntry = uniqueKeyEntries.next();
634+
final UniqueKey uniqueKey = uniqueKeyEntry.getValue();
635+
if ( isSameAsPrimaryKeyColumns( uniqueKey ) ) {
636+
primaryKey.setOrderingUniqueKey( uniqueKey );
624637
uniqueKeyEntries.remove();
625638
}
626639
}
@@ -749,6 +762,7 @@ public void setViewQuery(String viewQuery) {
749762
this.viewQuery = viewQuery;
750763
}
751764

765+
@Deprecated(since = "7") // this class should be private!
752766
public static class ForeignKeyKey implements Serializable {
753767
private final String referencedClassName;
754768
private final Column[] columns;
@@ -769,10 +783,8 @@ public int hashCode() {
769783
}
770784

771785
public boolean equals(Object other) {
772-
if ( !(other instanceof ForeignKeyKey foreignKeyKey) ) {
773-
return false;
774-
}
775-
return Arrays.equals( foreignKeyKey.columns, columns )
786+
return other instanceof ForeignKeyKey foreignKeyKey
787+
&& Arrays.equals( foreignKeyKey.columns, columns )
776788
&& Arrays.equals( foreignKeyKey.referencedColumns, referencedColumns );
777789
}
778790

hibernate-core/src/main/java/org/hibernate/tool/schema/internal/AbstractSchemaMigrator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ protected void applyForeignKeys(
435435
GenerationTarget... targets) {
436436
if ( dialect.hasAlterTable() ) {
437437
final Exporter<ForeignKey> exporter = dialect.getForeignKeyExporter();
438-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
438+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
439439
if ( foreignKey.isPhysicalConstraint()
440440
&& foreignKey.isCreationEnabled()
441441
&& ( tableInformation == null || !checkForExistingForeignKey( foreignKey, tableInformation ) ) ) {

hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaCreatorImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ private static void createForeignKeys(
290290
if ( schemaFilter.includeTable( table )
291291
&& contributableInclusionMatcher.matches( table ) ) {
292292
// foreign keys
293-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
293+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
294294
applySqlStrings(
295295
dialect.getForeignKeyExporter().getSqlCreateStrings( foreignKey, metadata, context ),
296296
formatter,

hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaDropperImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ private void applyConstraintDropping(
475475
if ( table.isPhysicalTable()
476476
&& schemaFilter.includeTable( table )
477477
&& inclusionFilter.matches( table ) ) {
478-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
478+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
479479
applySqlStrings(
480480
dialect.getForeignKeyExporter().getSqlDropStrings( foreignKey, metadata, context ),
481481
formatter,

hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaTruncatorImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ private void disableConstraints(
198198
continue;
199199
}
200200

201-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
201+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
202202
if ( dialect.canDisableConstraints() ) {
203203
applySqlString(
204204
dialect.getTableCleaner().getSqlDisableConstraintString( foreignKey, metadata, context ),
@@ -241,7 +241,7 @@ private void enableConstraints(
241241
continue;
242242
}
243243

244-
for ( ForeignKey foreignKey : table.getForeignKeys().values() ) {
244+
for ( ForeignKey foreignKey : table.getForeignKeyCollection() ) {
245245
if ( dialect.canDisableConstraints() ) {
246246
applySqlString(
247247
dialect.getTableCleaner().getSqlEnableConstraintString( foreignKey, metadata, context ),

hibernate-core/src/test/java/org/hibernate/orm/test/annotations/collectionelement/DefaultNamingCollectionElementTest.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import java.util.HashMap;
88
import java.util.Iterator;
9-
import java.util.List;
109
import java.util.Locale;
1110

1211
import org.hibernate.Filter;
@@ -15,7 +14,6 @@
1514
import org.hibernate.mapping.Collection;
1615
import org.hibernate.mapping.Column;
1716
import org.hibernate.mapping.ForeignKey;
18-
import org.hibernate.query.Query;
1917

2018
import org.hibernate.testing.orm.junit.JiraKey;
2119
import org.hibernate.testing.orm.junit.DomainModel;
@@ -39,7 +37,6 @@
3937
* @author Hardy Ferentschik
4038
* @author Gail Badner
4139
*/
42-
@SuppressWarnings("unchecked")
4340
@DomainModel(
4441
annotatedClasses = {
4542
Boy.class,
@@ -102,10 +99,10 @@ public void testSimpleElement(SessionFactoryScope scope) {
10299
assertNotNull( boy.getFavoriteNumbers() );
103100
assertEquals( 3, boy.getFavoriteNumbers()[1] );
104101
assertTrue( boy.getCharacters().contains( CharacterTrait.CRAFTY ) );
105-
assertTrue( boy.getFavoriteFood().get( "dinner" ).equals( FavoriteFood.SUSHI ) );
106-
assertTrue( boy.getFavoriteFood().get( "lunch" ).equals( FavoriteFood.KUNGPAOCHICKEN ) );
107-
assertTrue( boy.getFavoriteFood().get( "breakfast" ).equals( FavoriteFood.PIZZA ) );
108-
List result = session.createQuery(
102+
assertEquals( FavoriteFood.SUSHI, boy.getFavoriteFood().get( "dinner" ) );
103+
assertEquals( FavoriteFood.KUNGPAOCHICKEN, boy.getFavoriteFood().get( "lunch" ) );
104+
assertEquals( FavoriteFood.PIZZA, boy.getFavoriteFood().get( "breakfast" ) );
105+
var result = session.createQuery(
109106
"select boy from Boy boy join boy.nickNames names where names = :name" )
110107
.setParameter( "name", "Thing" ).list();
111108
assertEquals( 1, result.size() );
@@ -210,11 +207,11 @@ public void testLazyCollectionofElements(SessionFactoryScope scope) {
210207
assertTrue( boy.getNickNames().contains( "Thing" ) );
211208
assertNotNull( boy.getScorePerNickName() );
212209
assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
213-
assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
210+
assertEquals( Integer.valueOf( 5 ), boy.getScorePerNickName().get( "Thing" ) );
214211
assertNotNull( boy.getFavoriteNumbers() );
215212
assertEquals( 3, boy.getFavoriteNumbers()[1] );
216213
assertTrue( boy.getCharacters().contains( CharacterTrait.CRAFTY ) );
217-
List result = session.createQuery(
214+
var result = session.createQuery(
218215
"select boy from Boy boy join boy.nickNames names where names = :name" )
219216
.setParameter( "name", "Thing" ).list();
220217
assertEquals( 1, result.size() );
@@ -240,9 +237,8 @@ public void testFetchEagerAndFilter(SessionFactoryScope scope) {
240237
Filter filter = session.enableFilter( "selectedLocale" );
241238
filter.setParameter( "param", "fr" );
242239

243-
Query q = session.createQuery( "from TestCourse t" );
244-
List l = q.list();
245-
assertEquals( 1, l.size() );
240+
assertEquals( 1,
241+
session.createQuery( "from TestCourse t" ).list().size() );
246242

247243
TestCourse t = session.get( TestCourse.class, test.getTestCourseId() );
248244
assertEquals( 1, t.getTitle().getVariations().size() );
@@ -407,8 +403,7 @@ protected void checkDefaultJoinColumnName(
407403
assertEquals( ownerForeignKeyNameExpected, ownerCollection.getKey().getSelectables().get( 0 ).getText() );
408404

409405
boolean hasOwnerFK = false;
410-
for (Iterator it = ownerCollection.getCollectionTable().getForeignKeys().values().iterator(); it.hasNext(); ) {
411-
final ForeignKey fk = (ForeignKey) it.next();
406+
for ( final ForeignKey fk : ownerCollection.getCollectionTable().getForeignKeyCollection() ) {
412407
assertSame( ownerCollection.getCollectionTable(), fk.getTable() );
413408
if ( fk.getColumnSpan() > 1 ) {
414409
continue;

0 commit comments

Comments
 (0)