Here is my repository:
public interface MyObjectRepository extends CrudRepository<MyObject, Long> {
    @Query("<a-complex-query>")
    List<MyObject> doBusinessSpecificComplexQuery();
}
I can type directly my complex query in the @Query annotation but the code loose its readability.
I would like to do something like below instead:
public interface MyObjectRepository extends CrudRepository<MyObject, Long> {
    @Query(load("classpath:my-complex-query.sql"))
    List<MyObject> doBusinessSpecificComplexQuery();
}
This won't work since @Query value parameter expects a constant value.
How can I read my complex query from a resource ?
You can use JPA Named Query. You need to put the query in the orm.xml file like this:
 <named-query name="User.findByLastname">
    <query>select u from User u where u.lastname = ?1</query>
 </named-query>
For example and then you just need to declare the method findByLastname in your repository class:
public interface UserRepository extends JpaRepository<User, Long> {
  List<User> findByLastname(String lastname);   
}
You can see the documentation in Spring Data Documentation or for 2023 version of dependency have a look at Spring Data JPA 3.0.3 Documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With