Skip to content

Commit 01cdae4

Browse files
committed
allow query and finder methods to return Optional
required by Jakarta Data spec
1 parent 7e9b55f commit 01cdae4

File tree

5 files changed

+14
-1
lines changed

5 files changed

+14
-1
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/AbstractQueryMethod.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ static void closingBrace(StringBuilder declaration) {
331331
return returnTypeName;
332332
}
333333

334-
private void unwrapQuery(StringBuilder declaration, boolean unwrapped) {
334+
void unwrapQuery(StringBuilder declaration, boolean unwrapped) {
335335
if ( !unwrapped ) {
336336
declaration
337337
.append("\n\t\t\t.unwrap(")

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

+1
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ private static boolean isLegalRawResultType(String containerTypeName) {
630630

631631
private static boolean isLegalGenericResultType(String containerTypeName) {
632632
return containerTypeName.equals(Constants.LIST)
633+
|| containerTypeName.equals(Constants.OPTIONAL)
633634
|| containerTypeName.equals(Constants.TYPED_QUERY)
634635
|| containerTypeName.equals(Constants.HIB_QUERY)
635636
|| containerTypeName.equals(Constants.HIB_SELECTION_QUERY);

tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/CriteriaFinderMethod.java

+6
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ else if ( isOrderParam(paramType) && !isJakartaSortParam(paramType) ) {
128128
declaration
129129
.append(".getSingleResult()");
130130
}
131+
else if ( containerType.equals(Constants.OPTIONAL) ) {
132+
unwrapQuery( declaration, unwrap );
133+
declaration
134+
.append("\n\t\t\t")
135+
.append(".uniqueResultOptional()");
136+
}
131137
else if ( containerType.equals(Constants.LIST) ) {
132138
if ( unwrap || hasOrderParameter || hasEnabledFetchProfiles ) {
133139
declaration.append("\n\t\t\t");

tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/annotation/QueryMethod.java

+5
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,11 @@ else if ( containerTypeName == null ) {
152152
declaration
153153
.append("\n\t\t\t.getSingleResult()");
154154
}
155+
else if ( containerTypeName.equals(Constants.OPTIONAL) ) {
156+
unwrapQuery( declaration, unwrapped );
157+
declaration
158+
.append("\n\t\t\t.uniqueResultOptional()");
159+
}
155160
else if ( containerTypeName.equals(Constants.LIST) ) {
156161
declaration
157162
.append("\n\t\t\t.getResultList()");

tooling/metamodel-generator/src/main/java/org/hibernate/jpamodelgen/util/Constants.java

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public final class Constants {
100100
public static final String LIST = java.util.List.class.getName();
101101
public static final String MAP = java.util.Map.class.getName();
102102
public static final String SET = java.util.Set.class.getName();
103+
public static final String OPTIONAL = java.util.Optional.class.getName();
103104

104105
public static final Map<String, String> COLLECTIONS = Map.of(
105106
COLLECTION, Constants.COLLECTION_ATTRIBUTE,

0 commit comments

Comments
 (0)