|
43 | 43 | import org.springframework.data.domain.Sort;
|
44 | 44 | import org.springframework.data.jpa.domain.sample.User;
|
45 | 45 | import org.springframework.data.jpa.provider.QueryExtractor;
|
| 46 | +import org.springframework.data.jpa.repository.NativeQuery; |
46 | 47 | import org.springframework.data.jpa.repository.Query;
|
47 | 48 | import org.springframework.data.jpa.repository.QueryRewriter;
|
48 | 49 | import org.springframework.data.jpa.repository.sample.UserRepository;
|
|
65 | 66 | * @author Greg Turnquist
|
66 | 67 | * @author Krzysztof Krason
|
67 | 68 | * @author Erik Pellizzon
|
| 69 | + * @author Danny van den Elshout |
68 | 70 | */
|
69 | 71 | @ExtendWith(MockitoExtension.class)
|
70 | 72 | @MockitoSettings(strictness = Strictness.LENIENT)
|
@@ -160,6 +162,26 @@ void discoversNativeQuery() throws Exception {
|
160 | 162 | verify(em).createNativeQuery("SELECT u FROM User u WHERE u.lastname = ?1", User.class);
|
161 | 163 | }
|
162 | 164 |
|
| 165 | + @Test // GH-3155 |
| 166 | + @SuppressWarnings({ "rawtypes", "unchecked" }) |
| 167 | + void discoversNativeQueryFromNativeQueryInterface() throws Exception { |
| 168 | + |
| 169 | + Method method = SampleRepository.class.getMethod("findByLastnameNativeAnnotation", String.class); |
| 170 | + JpaQueryMethod queryMethod = new JpaQueryMethod(method, metadata, factory, extractor); |
| 171 | + AbstractJpaQuery jpaQuery = JpaQueryFactory.INSTANCE.fromMethodWithQueryString(queryMethod, em, |
| 172 | + queryMethod.getAnnotatedQuery(), null, QueryRewriter.IdentityQueryRewriter.INSTANCE, |
| 173 | + EVALUATION_CONTEXT_PROVIDER); |
| 174 | + |
| 175 | + assertThat(jpaQuery).isInstanceOf(NativeJpaQuery.class); |
| 176 | + |
| 177 | + when(em.createNativeQuery(anyString(), eq(User.class))).thenReturn(query); |
| 178 | + when(metadata.getReturnedDomainClass(method)).thenReturn((Class) User.class); |
| 179 | + |
| 180 | + jpaQuery.createQuery(new JpaParametersParameterAccessor(queryMethod.getParameters(), new Object[] { "Matthews" })); |
| 181 | + |
| 182 | + verify(em).createNativeQuery("SELECT u FROM User u WHERE u.lastname = ?1", User.class); |
| 183 | + } |
| 184 | + |
163 | 185 | @Test // DATAJPA-554
|
164 | 186 | void rejectsNativeQueryWithDynamicSort() throws Exception {
|
165 | 187 |
|
@@ -271,6 +293,9 @@ interface SampleRepository {
|
271 | 293 | @Query(value = "SELECT u FROM User u WHERE u.lastname = ?1", nativeQuery = true)
|
272 | 294 | List<User> findNativeByLastname(String lastname);
|
273 | 295 |
|
| 296 | + @NativeQuery(value = "SELECT u FROM User u WHERE u.lastname = ?1") |
| 297 | + List<User> findByLastnameNativeAnnotation(String lastname); |
| 298 | + |
274 | 299 | @Query(value = "SELECT u FROM User u WHERE u.lastname = ?1", nativeQuery = true)
|
275 | 300 | List<User> findNativeByLastname(String lastname, Sort sort);
|
276 | 301 |
|
|
0 commit comments