I'm trying to set up a dynamic query using spring data, basically I have an array with a bunch of characteristics and I need to assemble the query based on those characteristics, pretty much something like "WHERE characteristic = A AND characteristic = B AND characteristic = C" but the amount of characteristics may vary.
I noticed that I can use the @Query annotation but is it possible to make the result of the @Query pageable ?
Is there any other way to accomplish this?
Page<Recipe> findDistinctByNameContainingAndOrganizationAndCharacteristicsInOrIngredientsContainingAndOrganizationAndCharacteristicsInOrDescriptionContainingAndOrganizationAndCharacteristicsInAllIgnoreCase(
String name, Organization organization1, List<Characteristic> characteristic1,
String ingredients, Organization organization2, List<Characteristic> characteristic2,
String description, Organization organization3, List<Characteristic> characteristic3,
Pageable pageable);
Yes.
@Query
supports pageable.. and yes there's another way to accomplish this.You could take a look at building query with criteria, that allow you add AND / OR where conditions dynamically. I actually use querydsl to facilitate my development.
In this post you can find a good explanation of both: http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
Altough it could be seem more complex at beginning, the use of this feature will make your code more consistent with increasing complexity
Use Spring Data JPA Querydsl. Read it here