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