Skip to content

Commit 9ebeb5d

Browse files
committed
HHH-19630 Adjust how Hibernate Processor determines the entity type
1 parent aa0cb8a commit 9ebeb5d

File tree

4 files changed

+30
-16
lines changed

4 files changed

+30
-16
lines changed

tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/constraint/DataTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ void test() {
1919
System.out.println( getMetaModelSourceAsString( MyEntity.class ) );
2020
System.out.println( getMetaModelSourceAsString( MyConstrainedRepository.class ) );
2121
assertMetamodelClassGeneratedFor( MyEntity.class );
22-
// assertMetamodelClassGeneratedFor( MyConstrainedRepository.class );
22+
assertMetamodelClassGeneratedFor( MyConstrainedRepository.class );
2323
}
2424
}

tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/constraint/MyConstrainedRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
import jakarta.data.repository.CrudRepository;
88
import jakarta.data.repository.Find;
99
import jakarta.data.repository.Repository;
10+
import jakarta.validation.Valid;
1011
import jakarta.validation.constraints.NotNull;
1112
import jakarta.validation.constraints.Size;
1213

1314
@Repository
1415
public interface MyConstrainedRepository extends CrudRepository<MyEntity, Long> {
1516

17+
@Valid
18+
@NotNull
1619
@Find
1720
MyEntity findByName(@NotNull @Size(min = 5) String name);
1821
}

tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/constraint/MyEntity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package org.hibernate.processor.test.data.constraint;
66

7+
import jakarta.persistence.Column;
78
import jakarta.persistence.Entity;
89
import jakarta.persistence.Id;
910

@@ -12,5 +13,6 @@ public class MyEntity {
1213

1314
@Id
1415
private Long id;
16+
@Column(unique = true)
1517
private String name;
1618
}

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
import java.util.Set;
6363
import java.util.StringTokenizer;
6464
import java.util.regex.Pattern;
65-
import java.util.stream.Collectors;
6665
import java.util.stream.Stream;
6766

6867
import jakarta.persistence.AccessType;
@@ -2066,7 +2065,7 @@ private void createCriteriaFinder(
20662065
new CriteriaFinderMethod(
20672066
this, method,
20682067
methodName,
2069-
returnType.toString(),
2068+
typeAsString( returnType, false ),
20702069
containerType,
20712070
paramNames,
20722071
paramTypes,
@@ -2379,7 +2378,7 @@ && matchesNaturalKey( entity, fieldTypes ) ) {
23792378
new CriteriaFinderMethod(
23802379
this, method,
23812380
methodName,
2382-
returnType.toString(),
2381+
typeAsString( returnType, false ),
23832382
containerType,
23842383
paramNames,
23852384
paramTypes,
@@ -2483,7 +2482,7 @@ private void createSingleParameterFinder(
24832482
new CriteriaFinderMethod(
24842483
this, method,
24852484
methodName,
2486-
returnType.toString(),
2485+
typeAsString( returnType, false ),
24872486
containerType,
24882487
paramNames,
24892488
paramTypes,
@@ -3427,25 +3426,35 @@ private List<String> parameterTypes(ExecutableElement method) {
34273426
* Workaround for a bug in Java 20/21. Should not be necessary!
34283427
*/
34293428
private String typeAsString(TypeMirror type) {
3430-
String result;
3429+
return typeAsString( type, true );
3430+
}
3431+
3432+
private String typeAsString(TypeMirror type, boolean includeAnnotations) {
34313433
if ( type instanceof DeclaredType dt && dt.asElement() instanceof TypeElement te ) {
3434+
StringBuilder result = new StringBuilder();
3435+
if ( includeAnnotations ) {
3436+
for ( AnnotationMirror annotation : type.getAnnotationMirrors() ) {
3437+
result.append( annotation.toString() ).append( ' ' );
3438+
}
3439+
}
34323440
// get the "fqcn" without any type arguments
3433-
result = te.getQualifiedName().toString();
3441+
result.append( te.getQualifiedName().toString() );
34343442
// add the < ? ,? ....> as necessary:
34353443
if ( !dt.getTypeArguments().isEmpty() ) {
3436-
result += dt.getTypeArguments().stream()
3437-
.map( this::typeAsString )
3438-
.collect( Collectors.joining( ",", "<", ">" ) );
3444+
result.append( "<" );
3445+
int index = 0;
3446+
for ( ; index < dt.getTypeArguments().size() - 1; index++ ) {
3447+
result.append( typeAsString( dt.getTypeArguments().get( index ), true ) )
3448+
.append( ", " );
3449+
}
3450+
result.append( typeAsString( dt.getTypeArguments().get( index ), true ) );
3451+
result.append( ">" );
34393452
}
3453+
return result.toString();
34403454
}
34413455
else {
3442-
result = type.toString();
3456+
return type.toString();
34433457
}
3444-
3445-
for ( AnnotationMirror annotation : type.getAnnotationMirrors() ) {
3446-
result = annotation.toString() + ' ' + result;
3447-
}
3448-
return result;
34493458
}
34503459

34513460
private TypeMirror parameterType(VariableElement parameter) {

0 commit comments

Comments
 (0)