Skip to content

Commit 734944f

Browse files
committed
very light refactoring
1 parent 44222e1 commit 734944f

File tree

6 files changed

+97
-92
lines changed

6 files changed

+97
-92
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnyBinder.java

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,13 @@
1010
import org.hibernate.AnnotationException;
1111
import org.hibernate.AssertionFailure;
1212
import org.hibernate.annotations.AnyDiscriminatorImplicitValues;
13-
import org.hibernate.annotations.Cascade;
1413
import org.hibernate.annotations.CascadeType;
1514
import org.hibernate.annotations.Columns;
1615
import org.hibernate.annotations.Formula;
1716
import org.hibernate.annotations.OnDelete;
1817
import org.hibernate.annotations.OnDeleteAction;
1918
import org.hibernate.boot.spi.MetadataBuildingContext;
2019
import org.hibernate.boot.spi.PropertyData;
21-
import org.hibernate.mapping.Any;
22-
import org.hibernate.mapping.Join;
23-
import org.hibernate.mapping.Property;
2420
import org.hibernate.metamodel.internal.FullNameImplicitDiscriminatorStrategy;
2521
import org.hibernate.metamodel.internal.ShortNameImplicitDiscriminatorStrategy;
2622
import org.hibernate.metamodel.spi.ImplicitDiscriminatorStrategy;
@@ -56,17 +52,16 @@ static void bindAny(
5652
);
5753
}
5854

59-
final var hibernateCascade = memberDetails.getDirectAnnotationUsage( Cascade.class );
6055
final var onDeleteAnn = memberDetails.getDirectAnnotationUsage( OnDelete.class );
6156
final var assocTable = propertyHolder.getJoinTable( memberDetails );
6257
if ( assocTable != null ) {
63-
final Join join = propertyHolder.addJoin( assocTable, false );
64-
for ( AnnotatedJoinColumn joinColumn : joinColumns.getJoinColumns() ) {
58+
final var join = propertyHolder.addJoin( assocTable, false );
59+
for ( var joinColumn : joinColumns.getJoinColumns() ) {
6560
joinColumn.setExplicitTableName( join.getTable().getName() );
6661
}
6762
}
6863
bindAny(
69-
aggregateCascadeTypes( null, hibernateCascade, false, context ),
64+
aggregateCascadeTypes( null, memberDetails, false, context ),
7065
//@Any has no cascade attribute
7166
joinColumns,
7267
onDeleteAnn == null ? null : onDeleteAnn.action(),
@@ -97,7 +92,7 @@ private static void bindAny(
9792

9893
final boolean lazy = any.fetch() == FetchType.LAZY;
9994
final boolean optional = any.optional();
100-
final Any value = BinderHelper.buildAnyValue(
95+
final var anyValue = BinderHelper.buildAnyValue(
10196
memberDetails.getDirectAnnotationUsage( Column.class ),
10297
getOverridableAnnotation( memberDetails, Formula.class, context ),
10398
columns,
@@ -114,13 +109,13 @@ private static void bindAny(
114109
final var anyDiscriminatorImplicitValues =
115110
memberDetails.getDirectAnnotationUsage( AnyDiscriminatorImplicitValues.class );
116111
if ( anyDiscriminatorImplicitValues != null ) {
117-
value.setImplicitDiscriminatorValueStrategy(
112+
anyValue.setImplicitDiscriminatorValueStrategy(
118113
resolveImplicitDiscriminatorStrategy( anyDiscriminatorImplicitValues, context ) );
119114
}
120115

121116
final var binder = new PropertyBinder();
122117
binder.setName( inferredData.getPropertyName() );
123-
binder.setValue( value );
118+
binder.setValue( anyValue );
124119
binder.setLazy( lazy );
125120
//binder.setCascade(cascadeStrategy);
126121
if ( isIdentifierMapper ) {
@@ -133,8 +128,8 @@ private static void bindAny(
133128
binder.setHolder( propertyHolder );
134129
binder.setMemberDetails( memberDetails );
135130
binder.setEntityBinder( entityBinder );
136-
Property prop = binder.makeProperty();
137-
prop.setOptional( optional && value.isNullable() );
131+
final var prop = binder.makeProperty();
132+
prop.setOptional( optional && anyValue.isNullable() );
138133
//composite FK columns are in the same table, so it's OK
139134
propertyHolder.addProperty( prop, inferredData.getAttributeMember(), columns, inferredData.getDeclaringClass() );
140135
binder.callAttributeBindersInSecondPass( prop );
@@ -146,22 +141,25 @@ public static ImplicitDiscriminatorStrategy resolveImplicitDiscriminatorStrategy
146141
return switch ( anyDiscriminatorImplicitValues.value() ) {
147142
case FULL_NAME -> FullNameImplicitDiscriminatorStrategy.FULL_NAME_STRATEGY;
148143
case SHORT_NAME -> ShortNameImplicitDiscriminatorStrategy.SHORT_NAME_STRATEGY;
149-
case CUSTOM -> {
150-
final var customStrategy = anyDiscriminatorImplicitValues.implementation();
151-
if ( ImplicitDiscriminatorStrategy.class.equals( customStrategy ) ) {
152-
yield null;
153-
}
154-
else if ( FullNameImplicitDiscriminatorStrategy.class.equals( customStrategy ) ) {
155-
yield FullNameImplicitDiscriminatorStrategy.FULL_NAME_STRATEGY;
156-
}
157-
else if ( ShortNameImplicitDiscriminatorStrategy.class.equals( customStrategy ) ) {
158-
yield ShortNameImplicitDiscriminatorStrategy.SHORT_NAME_STRATEGY;
159-
}
160-
else {
161-
yield context.getBootstrapContext().getCustomTypeProducer()
162-
.produceBeanInstance( customStrategy );
163-
}
164-
}
144+
case CUSTOM -> customStrategy( anyDiscriminatorImplicitValues, context );
165145
};
166146
}
147+
148+
private static ImplicitDiscriminatorStrategy customStrategy(
149+
AnyDiscriminatorImplicitValues anyDiscriminatorImplicitValues, MetadataBuildingContext context) {
150+
final var customStrategy = anyDiscriminatorImplicitValues.implementation();
151+
if ( ImplicitDiscriminatorStrategy.class.equals( customStrategy ) ) {
152+
return null;
153+
}
154+
else if ( FullNameImplicitDiscriminatorStrategy.class.equals( customStrategy ) ) {
155+
return FullNameImplicitDiscriminatorStrategy.FULL_NAME_STRATEGY;
156+
}
157+
else if ( ShortNameImplicitDiscriminatorStrategy.class.equals( customStrategy ) ) {
158+
return ShortNameImplicitDiscriminatorStrategy.SHORT_NAME_STRATEGY;
159+
}
160+
else {
161+
return context.getBootstrapContext().getCustomTypeProducer()
162+
.produceBeanInstance( customStrategy );
163+
}
164+
}
167165
}

hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ public static Any buildAnyValue(
794794
}
795795
}
796796
keyValueBinder.setType( memberDetails, memberDetails.getType() );
797-
final BasicValue keyDescriptor = keyValueBinder.make();
797+
final var keyDescriptor = keyValueBinder.make();
798798
any.setKey( keyDescriptor );
799799
keyValueBinder.fillSimpleValue();
800800
keyColumns.checkPropertyConsistency();
@@ -879,9 +879,10 @@ public static FetchMode getFetchMode(FetchType fetch) {
879879

880880
public static EnumSet<CascadeType> aggregateCascadeTypes(
881881
jakarta.persistence.CascadeType[] cascadeTypes,
882-
Cascade cascadeAnnotation,
882+
MemberDetails memberDetails,
883883
boolean orphanRemoval,
884884
MetadataBuildingContext context) {
885+
final var cascadeAnnotation = memberDetails.getDirectAnnotationUsage( Cascade.class );
885886
final var cascades = convertToHibernateCascadeType( cascadeTypes );
886887
final var hibernateCascades = cascadeAnnotation == null ? null : cascadeAnnotation.value();
887888
if ( !isEmpty( hibernateCascades ) ) {

hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,6 @@ public static void bindCollection(
243243
collectionBinder.setInheritanceStatePerClass( inheritanceStatePerClass );
244244
collectionBinder.setDeclaringClass( inferredData.getDeclaringClass() );
245245

246-
final var hibernateCascade = memberDetails.getAnnotationUsage( Cascade.class, modelsContext );
247-
248246
collectionBinder.setElementColumns( elementColumns(
249247
propertyHolder,
250248
nullability,
@@ -287,8 +285,7 @@ public static void bindCollection(
287285
oneToManyAnn,
288286
manyToManyAnn,
289287
elementCollectionAnn,
290-
collectionBinder,
291-
hibernateCascade
288+
collectionBinder
292289
)
293290
);
294291

@@ -302,20 +299,12 @@ public static void bindCollection(
302299
final HashMap<String, IdentifierGeneratorDefinition> availableGenerators = new HashMap<>();
303300
visitIdGeneratorDefinitions(
304301
memberDetails.getDeclaringType(),
305-
definition -> {
306-
if ( !definition.getName().isEmpty() ) {
307-
availableGenerators.put( definition.getName(), definition );
308-
}
309-
},
302+
definition -> addDefinition( definition, availableGenerators ),
310303
context
311304
);
312305
visitIdGeneratorDefinitions(
313306
memberDetails,
314-
definition -> {
315-
if ( !definition.getName().isEmpty() ) {
316-
availableGenerators.put( definition.getName(), definition );
317-
}
318-
},
307+
definition -> addDefinition( definition, availableGenerators ),
319308
context
320309
);
321310
collectionBinder.setLocalGenerators( availableGenerators );
@@ -324,6 +313,15 @@ public static void bindCollection(
324313
collectionBinder.bind();
325314
}
326315

316+
private static void addDefinition(
317+
IdentifierGeneratorDefinition definition,
318+
Map<String, IdentifierGeneratorDefinition> availableGenerators) {
319+
final String definitionName = definition.getName();
320+
if ( !definitionName.isEmpty() ) {
321+
availableGenerators.put( definitionName, definition );
322+
}
323+
}
324+
327325
private static NotFoundAction notFoundAction(
328326
PropertyHolder propertyHolder,
329327
PropertyData inferredData,
@@ -443,8 +441,7 @@ private static String handleTargetEntity(
443441
OneToMany oneToManyAnn,
444442
ManyToMany manyToManyAnn,
445443
ElementCollection elementCollectionAnn,
446-
CollectionBinder collectionBinder,
447-
Cascade hibernateCascade) {
444+
CollectionBinder collectionBinder) {
448445

449446
//TODO enhance exception with @ManyToAny and @CollectionOfElements
450447
if ( oneToManyAnn != null && manyToManyAnn != null ) {
@@ -461,7 +458,7 @@ private static String handleTargetEntity(
461458
mappedBy = nullIfEmpty( oneToManyAnn.mappedBy() );
462459
collectionBinder.setTargetEntity( oneToManyAnn.targetEntity() );
463460
collectionBinder.setCascadeStrategy(
464-
aggregateCascadeTypes( oneToManyAnn.cascade(), hibernateCascade,
461+
aggregateCascadeTypes( oneToManyAnn.cascade(), property,
465462
oneToManyAnn.orphanRemoval(), context ) );
466463
collectionBinder.setOneToMany( true );
467464
}
@@ -479,14 +476,14 @@ else if ( manyToManyAnn != null ) {
479476
mappedBy = nullIfEmpty( manyToManyAnn.mappedBy() );
480477
collectionBinder.setTargetEntity( manyToManyAnn.targetEntity() );
481478
collectionBinder.setCascadeStrategy(
482-
aggregateCascadeTypes( manyToManyAnn.cascade(), hibernateCascade, false, context ) );
479+
aggregateCascadeTypes( manyToManyAnn.cascade(), property, false, context ) );
483480
collectionBinder.setOneToMany( false );
484481
}
485482
else if ( property.hasDirectAnnotationUsage( ManyToAny.class ) ) {
486483
mappedBy = null;
487484
collectionBinder.setTargetEntity( ClassDetails.VOID_CLASS_DETAILS );
488485
collectionBinder.setCascadeStrategy(
489-
aggregateCascadeTypes( null, hibernateCascade, false, context ) );
486+
aggregateCascadeTypes( null, property, false, context ) );
490487
collectionBinder.setOneToMany( false );
491488
}
492489
else {
@@ -1387,14 +1384,14 @@ private ModelsContext modelsContext() {
13871384
}
13881385

13891386
private void handleFetchProfileOverrides() {
1390-
property.forEachAnnotationUsage( FetchProfileOverride.class, modelsContext(), (usage) -> {
1391-
getMetadataCollector().addSecondPass( new FetchSecondPass(
1392-
usage,
1393-
propertyHolder,
1394-
propertyName,
1395-
buildingContext
1396-
) );
1397-
} );
1387+
property.forEachAnnotationUsage( FetchProfileOverride.class, modelsContext(),
1388+
usage -> getMetadataCollector()
1389+
.addSecondPass( new FetchSecondPass(
1390+
usage,
1391+
propertyHolder,
1392+
propertyName,
1393+
buildingContext
1394+
) ) );
13981395
}
13991396

14001397
private void handleFetch() {
@@ -1602,11 +1599,8 @@ private void createOneToManyBackref(org.hibernate.mapping.OneToMany oneToMany) {
16021599
// for non-inverse one-to-many, with a not-null fk, add a backref!
16031600
final String entityName = oneToMany.getReferencedEntityName();
16041601
final var referencedEntity = collector.getEntityBinding( entityName );
1605-
final Backref backref = new Backref();
1606-
final String backrefName = '_' + foreignJoinColumns.getPropertyName()
1607-
+ '_' + foreignJoinColumns.getColumns().get(0).getLogicalColumnName()
1608-
+ "Backref";
1609-
backref.setName( backrefName );
1602+
final var backref = new Backref();
1603+
backref.setName( backrefName() );
16101604
backref.setOptional( true );
16111605
backref.setUpdatable( false);
16121606
backref.setSelectable( false );
@@ -1616,6 +1610,12 @@ private void createOneToManyBackref(org.hibernate.mapping.OneToMany oneToMany) {
16161610
referencedEntity.addProperty( backref );
16171611
}
16181612

1613+
private String backrefName() {
1614+
return '_' + foreignJoinColumns.getPropertyName()
1615+
+ '_' + foreignJoinColumns.getColumns().get( 0 ).getLogicalColumnName()
1616+
+ "Backref";
1617+
}
1618+
16191619
private void handleJpaOrderBy(Collection collection, PersistentClass associatedClass) {
16201620
final String hqlOrderBy = extractHqlOrderBy( jpaOrderBy );
16211621
if ( hqlOrderBy != null ) {

hibernate-core/src/main/java/org/hibernate/boot/model/internal/EmbeddableBinder.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,7 @@ public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws
11681168

11691169
//prepare column name structure
11701170
boolean isExplicitReference = true;
1171-
final List<AnnotatedJoinColumn> columns = joinColumns.getJoinColumns();
1171+
final var columns = joinColumns.getJoinColumns();
11721172
final Map<String, AnnotatedJoinColumn> columnByReferencedName = mapOfSize( columns.size() );
11731173
for ( var joinColumn : columns ) {
11741174
if ( !joinColumn.isReferenceImplicit() ) {
@@ -1321,15 +1321,17 @@ private Property createSimpleProperty(
13211321
if ( selectable instanceof org.hibernate.mapping.Column column ) {
13221322
final AnnotatedJoinColumn joinColumn;
13231323
final String logicalColumnName;
1324+
final String referenceName;
13241325
if ( isExplicitReference ) {
13251326
logicalColumnName = column.getName();
1326-
joinColumn = columnByReferencedName.get( normalizedColumnName( column ) );
1327+
referenceName = normalizedColumnName( column );
13271328
}
13281329
else {
13291330
logicalColumnName = null;
1330-
joinColumn = columnByReferencedName.get( String.valueOf( index.get() ) );
1331+
referenceName = String.valueOf( index.get() );
13311332
index.getAndIncrement();
13321333
}
1334+
joinColumn = columnByReferencedName.get( referenceName );
13331335
if ( joinColumn == null && !firstColumn.isNameDeferred() ) {
13341336
throw new AnnotationException(
13351337
"Property '" + propertyName

0 commit comments

Comments
 (0)