Skip to content

Commit c150b54

Browse files
committed
fix @delete queries for reactive repos
1 parent bf537f3 commit c150b54

File tree

5 files changed

+64
-17
lines changed

5 files changed

+64
-17
lines changed

tooling/metamodel-generator/src/jakartaData/java/org/hibernate/processor/test/data/reactive/ReactiveTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
public class ReactiveTest extends CompilationTest {
1818
@Test
19-
@WithClasses({ Publisher.class, Author.class, Address.class, Book.class, Library.class, Library2.class })
19+
@WithClasses({ Publisher.class, Author.class, Address.class, Book.class, Library.class, Library2.class, RepoWithPrimary.class })
2020
public void test() {
2121
System.out.println( getMetaModelSourceAsString( Author.class ) );
2222
System.out.println( getMetaModelSourceAsString( Book.class ) );
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.data.reactive;
6+
7+
import io.smallrye.mutiny.Uni;
8+
import jakarta.data.repository.Delete;
9+
import jakarta.data.repository.Insert;
10+
import jakarta.data.repository.Repository;
11+
import org.hibernate.reactive.mutiny.Mutiny;
12+
13+
@Repository
14+
public interface RepoWithPrimary {
15+
Uni<Mutiny.StatelessSession> session(); //required
16+
@Insert
17+
Uni<Void> insert(Book book);
18+
@Delete
19+
Uni<Void> delete(Book book);
20+
@Delete
21+
Uni<Void> deleteById(String isbn);
22+
}

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,7 @@ void createCriteriaQuery(StringBuilder declaration) {
137137
private void createBuilder(StringBuilder declaration) {
138138
declaration
139139
.append("\tvar _builder = ")
140-
.append(localSessionName());
141-
if ( isReactive() ) {
142-
declaration.append(".getFactory()");
143-
}
144-
declaration
140+
.append(localSessionName())
145141
.append(".getCriteriaBuilder();\n");
146142
}
147143

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

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,20 +1494,42 @@ else if ( hasAnnotation( method, JD_DELETE ) ) {
14941494

14951495
private void addDeleteMethod(ExecutableElement method, @Nullable TypeMirror returnType) {
14961496
if ( returnType != null ) {
1497-
final TypeKind kind = returnType.getKind();
1498-
if ( kind != TypeKind.VOID
1499-
&& kind != TypeKind.INT
1500-
&& kind != TypeKind.LONG ) {
1501-
message(method,
1502-
"must be 'void' or return 'int' or 'long'",
1503-
Diagnostic.Kind.ERROR);
1497+
if ( isReactive()
1498+
? isLegalReactiveDeleteReturnType(returnType)
1499+
: isLegalDeleteReturnType(returnType) ) {
1500+
createCriteriaDelete(method);
15041501
}
15051502
else {
1506-
createCriteriaDelete(method);
1503+
message(method,
1504+
isReactive()
1505+
? "must be 'Uni<Void>' or 'Uni<Integer>'"
1506+
: "must be 'void' or return 'int' or 'long'",
1507+
Diagnostic.Kind.ERROR);
15071508
}
15081509
}
15091510
}
15101511

1512+
private static boolean isLegalDeleteReturnType(TypeMirror returnType) {
1513+
final TypeKind kind = returnType.getKind();
1514+
return kind == TypeKind.VOID
1515+
|| kind == TypeKind.INT
1516+
|| kind == TypeKind.LONG;
1517+
}
1518+
1519+
private static boolean isLegalReactiveDeleteReturnType(TypeMirror returnType) {
1520+
final TypeKind kind = returnType.getKind();
1521+
if ( kind == TypeKind.DECLARED ) {
1522+
final DeclaredType type = (DeclaredType) returnType;
1523+
final TypeElement typeElement = (TypeElement) type.asElement();
1524+
final Name name = typeElement.getQualifiedName();
1525+
return name.contentEquals( Void.class.getName() )
1526+
|| name.contentEquals( Integer.class.getName() );
1527+
}
1528+
else {
1529+
return false;
1530+
}
1531+
}
1532+
15111533
private void addLifecycleMethod(ExecutableElement method) {
15121534
final TypeMirror returnType = unUniIfPossible( method, method.getReturnType() );
15131535
if ( method.getParameters().size() != 1 ) {

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ void executeQuery(StringBuilder declaration, List<String> paramTypes) {
6262
}
6363

6464
void tryReturn(StringBuilder declaration) {
65-
declaration
66-
.append("\n\ttry {\n\t\t");
65+
if ( !isReactive() ) {
66+
declaration
67+
.append("\n\ttry {\n\t\t");
68+
}
6769
if ( !"void".equals(fullReturnType) ) {
6870
declaration
6971
.append("return ");
@@ -72,7 +74,7 @@ void tryReturn(StringBuilder declaration) {
7274

7375
@Override
7476
String createQueryMethod() {
75-
return isUsingEntityManager() || isReactive()
77+
return isUsingEntityManager()
7678
? "createQuery"
7779
: "createMutationQuery";
7880
}
@@ -85,6 +87,11 @@ String specificationType() {
8587
private void execute(StringBuilder declaration) {
8688
declaration
8789
.append("\t\t\t.executeUpdate()");
90+
if ( isReactive() ) {
91+
if ( fullReturnType.endsWith("<java.lang.Void>") ) {}
92+
declaration
93+
.append(".replaceWithVoid()");
94+
}
8895
}
8996

9097
@Override

0 commit comments

Comments
 (0)