|
44 | 44 | import org.springframework.data.domain.Sort;
|
45 | 45 | import org.springframework.data.jpa.domain.sample.User;
|
46 | 46 | import org.springframework.data.jpa.provider.QueryExtractor;
|
| 47 | +import org.springframework.data.jpa.repository.NativeQuery; |
47 | 48 | import org.springframework.data.jpa.repository.Query;
|
48 | 49 | import org.springframework.data.jpa.repository.QueryRewriter;
|
49 | 50 | import org.springframework.data.jpa.repository.sample.UserRepository;
|
|
68 | 69 | * @author Krzysztof Krason
|
69 | 70 | * @author Erik Pellizzon
|
70 | 71 | * @author Christoph Strobl
|
| 72 | + * @author Danny van den Elshout |
71 | 73 | */
|
72 | 74 | @ExtendWith(MockitoExtension.class)
|
73 | 75 | @MockitoSettings(strictness = Strictness.LENIENT)
|
@@ -163,6 +165,26 @@ void discoversNativeQuery() throws Exception {
|
163 | 165 | verify(em).createNativeQuery("SELECT u FROM User u WHERE u.lastname = ?1", User.class);
|
164 | 166 | }
|
165 | 167 |
|
| 168 | + @Test // GH-3155 |
| 169 | + @SuppressWarnings({ "rawtypes", "unchecked" }) |
| 170 | + void discoversNativeQueryFromNativeQueryInterface() throws Exception { |
| 171 | + |
| 172 | + Method method = SampleRepository.class.getMethod("findByLastnameNativeAnnotation", String.class); |
| 173 | + JpaQueryMethod queryMethod = new JpaQueryMethod(method, metadata, factory, extractor); |
| 174 | + AbstractJpaQuery jpaQuery = JpaQueryFactory.INSTANCE.fromMethodWithQueryString(queryMethod, em, |
| 175 | + queryMethod.getAnnotatedQuery(), null, QueryRewriter.IdentityQueryRewriter.INSTANCE, |
| 176 | + EVALUATION_CONTEXT_PROVIDER); |
| 177 | + |
| 178 | + assertThat(jpaQuery).isInstanceOf(NativeJpaQuery.class); |
| 179 | + |
| 180 | + when(em.createNativeQuery(anyString(), eq(User.class))).thenReturn(query); |
| 181 | + when(metadata.getReturnedDomainClass(method)).thenReturn((Class) User.class); |
| 182 | + |
| 183 | + jpaQuery.createQuery(new JpaParametersParameterAccessor(queryMethod.getParameters(), new Object[] { "Matthews" })); |
| 184 | + |
| 185 | + verify(em).createNativeQuery("SELECT u FROM User u WHERE u.lastname = ?1", User.class); |
| 186 | + } |
| 187 | + |
166 | 188 | @Test // DATAJPA-554
|
167 | 189 | void rejectsNativeQueryWithDynamicSort() throws Exception {
|
168 | 190 |
|
@@ -300,6 +322,9 @@ interface SampleRepository {
|
300 | 322 | @Query(value = "SELECT u FROM User u WHERE u.lastname = ?1", nativeQuery = true)
|
301 | 323 | List<User> findNativeByLastname(String lastname);
|
302 | 324 |
|
| 325 | + @NativeQuery(value = "SELECT u FROM User u WHERE u.lastname = ?1") |
| 326 | + List<User> findByLastnameNativeAnnotation(String lastname); |
| 327 | + |
303 | 328 | @Query(value = "SELECT u FROM User u WHERE u.lastname = ?1", nativeQuery = true)
|
304 | 329 | List<User> findNativeByLastname(String lastname, Sort sort);
|
305 | 330 |
|
|
0 commit comments