Skip to content

Commit c96305a

Browse files
cigalygavinking
authored andcommitted
HHH-18960 Test case - when named query parameter allows multiple value binding, instance of java.util.Collection should be allowed as parameter
1 parent 89ba024 commit c96305a

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.data.multivaluebinding;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
import jakarta.persistence.NamedQuery;
10+
11+
@Entity
12+
@NamedQuery(name = "#getPostsByName", query = "from Post p where p.name in (:names)")
13+
public class Post {
14+
@Id
15+
Integer id;
16+
17+
String name;
18+
19+
Integer value;
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.data.multivaluebinding;
6+
7+
import jakarta.data.repository.DataRepository;
8+
import jakarta.data.repository.Query;
9+
import jakarta.data.repository.Repository;
10+
11+
import java.util.Collection;
12+
import java.util.List;
13+
14+
@Repository
15+
public interface PostRepository extends DataRepository<Post, Integer> {
16+
17+
@Query("from Post p where p.name in (:names)")
18+
List<Post> getPostsByName(Collection<String> names);
19+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.data.multivaluebinding;
6+
7+
import jakarta.persistence.EntityManager;
8+
import org.hibernate.processor.test.util.CompilationTest;
9+
import org.hibernate.processor.test.util.WithClasses;
10+
import org.junit.Test;
11+
12+
import java.lang.reflect.Method;
13+
import java.lang.reflect.ParameterizedType;
14+
import java.lang.reflect.Type;
15+
import java.util.Collection;
16+
import java.util.List;
17+
18+
import static org.hibernate.processor.test.util.TestUtil.assertMetamodelClassGeneratedFor;
19+
import static org.hibernate.processor.test.util.TestUtil.assertPresenceOfMethodInMetamodelFor;
20+
import static org.hibernate.processor.test.util.TestUtil.getMetaModelSourceAsString;
21+
import static org.hibernate.processor.test.util.TestUtil.getMethodFromMetamodelFor;
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
23+
import static org.junit.jupiter.api.Assertions.fail;
24+
25+
public class TopicPostTest extends CompilationTest {
26+
@Test
27+
@WithClasses({Post.class, PostRepository.class})
28+
public void test() {
29+
assertMetamodelClassGeneratedFor( Post.class, true );
30+
assertMetamodelClassGeneratedFor( Post.class );
31+
assertMetamodelClassGeneratedFor( PostRepository.class );
32+
33+
assertPresenceOfMethodInMetamodelFor( Post.class, "getPostsByName", EntityManager.class, List.class );
34+
final Method method = getMethodFromMetamodelFor( Post.class, "getPostsByName", EntityManager.class, List.class );
35+
final Type methodParam = method.getGenericParameterTypes()[1];
36+
if ( methodParam instanceof ParameterizedType parameterized ) {
37+
assertEquals( String.class, parameterized.getActualTypeArguments()[0] );
38+
}
39+
else {
40+
fail();
41+
}
42+
43+
assertPresenceOfMethodInMetamodelFor( PostRepository.class, "getPostsByName", Collection.class );
44+
final Method repositoryMethod = getMethodFromMetamodelFor( PostRepository.class, "getPostsByName", Collection.class );
45+
final Type repositoryMethodParam = repositoryMethod.getGenericParameterTypes()[0];
46+
if ( repositoryMethodParam instanceof ParameterizedType parameterized ) {
47+
assertEquals( String.class, parameterized.getActualTypeArguments()[0] );
48+
}
49+
else {
50+
fail();
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)