Skip to content

Commit 6bf1e7c

Browse files
committed
HHH-19449 simplify the whole design
Remove BindableType.getBindableJavaType() which created all sorts of confusion with JPAs Bindable.getBindableJavaType(). Now can just use Type.getJavaType() for this.
1 parent 9847729 commit 6bf1e7c

File tree

61 files changed

+180
-207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+180
-207
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private static <T, E, K> SubGraphImplementor<?> makeAttributeNodeValueSubgraph(
142142
private static <T, E, K> SubGraphImplementor<?> makeAttributeNodeKeySubgraph(
143143
AttributeNodeImplementor<T, E, K> attributeNode, Class<?> subgraphType) {
144144
final Class<?> attributeKeyType =
145-
attributeNode.getAttributeDescriptor().getKeyGraphType().getBindableJavaType();
145+
attributeNode.getAttributeDescriptor().getKeyGraphType().getJavaType();
146146
if ( !attributeKeyType.isAssignableFrom( subgraphType ) ) {
147147
throw new AnnotationException( "Named subgraph type '" + subgraphType.getName()
148148
+ "' is not a subtype of the key type '" + attributeKeyType.getName() + "'" );

hibernate-core/src/main/java/org/hibernate/engine/query/spi/AbstractParameterDescriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public Integer getPosition() {
3838

3939
@Override
4040
public Class<T> getParameterType() {
41-
return expectedType == null ? null : expectedType.getBindableJavaType();
41+
return expectedType == null ? null : expectedType.getJavaType();
4242
}
4343

4444
@Override

hibernate-core/src/main/java/org/hibernate/graph/internal/AttributeNodeImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.hibernate.metamodel.model.domain.PluralPersistentAttribute;
1717
import org.hibernate.metamodel.model.domain.SimpleDomainType;
1818
import org.hibernate.metamodel.model.domain.SingularPersistentAttribute;
19-
import org.hibernate.type.BindableType;
2019

2120
import java.util.HashMap;
2221
import java.util.Map;
@@ -260,7 +259,7 @@ public SubGraphImplementor<E> makeSubGraph() {
260259
@Override @Deprecated
261260
public <S> SubGraphImplementor<S> makeSubGraph(Class<S> subtype) {
262261
final ManagedDomainType<E> managedType = asManagedType( valueGraphType );
263-
if ( !((BindableType<K>) managedType).getBindableJavaType().isAssignableFrom( subtype ) ) {
262+
if ( !managedType.getJavaType().isAssignableFrom( subtype ) ) {
264263
throw new IllegalArgumentException( "Not a subtype: " + subtype.getName() );
265264
}
266265
@SuppressWarnings("unchecked")
@@ -284,7 +283,7 @@ public SubGraphImplementor<K> makeKeySubGraph() {
284283
public <S> SubGraphImplementor<S> makeKeySubGraph(Class<S> subtype) {
285284
checkMap();
286285
final ManagedDomainType<K> type = asManagedType( keyGraphType );
287-
if ( ! ((BindableType<K>) type).getBindableJavaType().isAssignableFrom( subtype ) ) {
286+
if ( !type.getJavaType().isAssignableFrom( subtype ) ) {
288287
throw new IllegalArgumentException( "Not a key subtype: " + subtype.getName() );
289288
}
290289
@SuppressWarnings("unchecked")

hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataContext.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,9 @@ public Map<Class<?>, MappedSuperclassDomainType<?>> getMappedSuperclassTypeMap()
173173
}
174174

175175
public void registerEntityType(PersistentClass persistentClass, EntityTypeImpl<?> entityType) {
176-
if ( entityType.getBindableJavaType() != null && entityType.getBindableJavaType() != Map.class ) {
177-
entityTypes.put( entityType.getBindableJavaType(), entityType );
176+
final Class<?> javaType = entityType.getJavaType();
177+
if ( javaType != null && javaType != Map.class ) {
178+
entityTypes.put( javaType, entityType );
178179
}
179180

180181
identifiableTypesByName.put( persistentClass.getEntityName(), entityType );

hibernate-core/src/main/java/org/hibernate/metamodel/mapping/CollectionPart.java

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,36 @@
1818
* @author Steve Ebersole
1919
*/
2020
public interface CollectionPart extends ValuedModelPart, Fetchable, JavaTypedExpressible {
21+
2122
enum Nature {
2223
/**
23-
* The Collection element or Map element
24+
* The Collection element or Map element.
2425
*/
25-
ELEMENT( "{element}" ),
26+
ELEMENT,
2627
/**
27-
* The List index or Map key
28+
* The List index or Map key.
2829
*/
29-
INDEX( "{index}" ),
30+
INDEX,
3031
/**
31-
* The identifier for
32+
* The identifier for and idbag.
3233
*/
33-
ID( "{collection-id}" );
34-
35-
private final String name;
36-
37-
Nature(String name) {
38-
this.name = name;
39-
}
34+
ID;
4035

4136
public String getName() {
42-
return name;
37+
return switch (this) {
38+
case ELEMENT -> "{element}";
39+
case INDEX -> "{index}";
40+
case ID -> "{collection-id}";
41+
};
4342
}
4443

4544
public static Nature fromNameExact(String name) {
46-
switch ( name ) {
47-
case "{element}":
48-
return ELEMENT;
49-
case "{index}":
50-
return INDEX;
51-
case "{collection-id}":
52-
return ID;
53-
}
54-
55-
return null;
45+
return switch ( name ) {
46+
case "{element}" -> ELEMENT;
47+
case "{index}" -> INDEX;
48+
case "{collection-id}" -> ID;
49+
default -> null;
50+
};
5651
}
5752

5853
public static Nature fromName(String name) {
@@ -75,7 +70,7 @@ public static Nature fromName(String name) {
7570
return ELEMENT;
7671
}
7772

78-
if ( ID.name.equals( name ) ) {
73+
if ( ID.getName().equals( name ) ) {
7974
return ID;
8075
}
8176

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/BasicDomainType.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@ default PersistenceType getPersistenceType() {
2020
return PersistenceType.BASIC;
2121
}
2222

23-
@Override
24-
default Class<J> getBindableJavaType() {
25-
return ReturnableType.super.getBindableJavaType();
26-
}
27-
2823
@Override
2924
default Class<J> getJavaType() {
3025
return ReturnableType.super.getJavaType();

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/DomainType.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@ public interface DomainType<J> {
3939
Class<J> getJavaType();
4040

4141
/**
42-
* The name of the type.
42+
* The name of the type. Usually, but not always, the name of a Java class.
4343
*
44-
* @apiNote This is the Hibernate notion of the type name. For most
45-
* types this is just the Java type ({@link Class}) name.
46-
* However, using the string allows for dynamic models.
44+
* @see ManagedDomainType#getTypeName()
45+
* @see org.hibernate.query.sqm.SqmExpressible#getTypeName()
4746
*/
48-
String getTypeName();
47+
default String getTypeName() {
48+
return getExpressibleJavaType().getTypeName();
49+
}
4950
}

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/ManagedDomainType.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Collection;
88
import java.util.function.Consumer;
99

10+
import org.hibernate.Internal;
1011
import org.hibernate.metamodel.RepresentationMode;
1112

1213
import jakarta.persistence.metamodel.ManagedType;
@@ -18,22 +19,33 @@
1819
*/
1920
public interface ManagedDomainType<J> extends DomainType<J>, ManagedType<J> {
2021
/**
21-
* Get the type name.
22+
* The name of the managed type.
2223
*
2324
* @apiNote This usually returns the name of the Java class. However, for
2425
* {@linkplain RepresentationMode#MAP dynamic models}, this returns
2526
* the symbolic name since the Java type is {@link java.util.Map}.
2627
*
27-
* @return The type name.
28-
*
2928
* @see #getRepresentationMode()
3029
*/
30+
@Override
3131
String getTypeName();
3232

33+
/**
34+
* The parent {@linkplain JpaMetamodel metamodel}.
35+
*/
3336
JpaMetamodel getMetamodel();
3437

38+
/**
39+
* The representation mode.
40+
*
41+
* @return {@link RepresentationMode#POJO POJO} for Java class entities,
42+
* or {@link RepresentationMode#MAP MAP} for dynamic entities.
43+
*/
3544
RepresentationMode getRepresentationMode();
3645

46+
/**
47+
* The Java class of the entity type.
48+
*/
3749
@Override
3850
default Class<J> getJavaType() {
3951
return getExpressibleJavaType().getJavaTypeClass();
@@ -44,8 +56,12 @@ default Class<J> getJavaType() {
4456
*/
4557
ManagedDomainType<? super J> getSuperType();
4658

59+
/**
60+
* The descriptors of all known managed subtypes of this type.
61+
*/
4762
Collection<? extends ManagedDomainType<? extends J>> getSubTypes();
4863

64+
@Internal
4965
void addSubType(ManagedDomainType<? extends J> subType);
5066

5167
void visitAttributes(Consumer<? super PersistentAttribute<? super J, ?>> action);

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/SimpleDomainType.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,11 @@
77
import jakarta.persistence.metamodel.Type;
88

99
/**
10-
* Describes any non-collection type
10+
* Describes any non-collection type.
1111
*
1212
* @author Steve Ebersole
1313
*/
1414
public interface SimpleDomainType<J> extends DomainType<J>, Type<J> {
15-
16-
default Class<J> getBindableJavaType() {
17-
return getJavaType();
18-
}
19-
2015
@Override
2116
default Class<J> getJavaType() {
2217
return getExpressibleJavaType().getJavaTypeClass();

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AbstractManagedType.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,6 @@ public Class<J> getJavaType() {
102102
return super.getJavaType();
103103
}
104104

105-
@Override
106-
public Class<J> getBindableJavaType() {
107-
return super.getBindableJavaType();
108-
}
109-
110105
@Override
111106
public SqmManagedDomainType<? super J> getSuperType() {
112107
return supertype;
@@ -336,13 +331,13 @@ private <K,Y> SqmSingularPersistentAttribute<K,Y> checkTypeForSingleAttribute(
336331

337332
private <T, Y> boolean hasMatchingReturnType(SingularAttribute<T, ?> attribute, Class<Y> javaType) {
338333
return javaType == null
339-
|| attribute.getBindableJavaType().equals( javaType )
334+
|| attribute.getJavaType().equals( javaType )
340335
|| isPrimitiveVariant( attribute, javaType );
341336
}
342337

343338
protected <Y> boolean isPrimitiveVariant(SingularAttribute<?,?> attribute, Class<Y> javaType) {
344339
if ( attribute != null ) {
345-
final Class<?> declaredType = attribute.getBindableJavaType();
340+
final Class<?> declaredType = attribute.getJavaType();
346341
if ( declaredType.isPrimitive() ) {
347342
return ( Boolean.class.equals( javaType ) && Boolean.TYPE.equals( declaredType ) )
348343
|| ( Character.class.equals( javaType ) && Character.TYPE.equals( declaredType ) )
@@ -418,7 +413,7 @@ private <E> void checkTypeForPluralAttributes(
418413
Class<E> elementType,
419414
PluralAttribute.CollectionType collectionType) {
420415
if ( attribute == null
421-
|| ( elementType != null && !attribute.getBindableJavaType().equals( elementType ) )
416+
|| elementType != null && !attribute.getBindableJavaType().equals( elementType )
422417
|| attribute.getCollectionType() != collectionType ) {
423418
throw new IllegalArgumentException(
424419
attributeType + " named " + name

0 commit comments

Comments
 (0)