spring-projects / spring-data-jpa

Simplifies the development of creating a JPA-based data access layer.
https://spring.io/projects/spring-data-jpa/
Apache License 2.0
3.01k stars 1.42k forks source link

Process spel values of @QueryHint #3082

Open ujhazib opened 1 year ago

ujhazib commented 1 year ago

Some query hints are very specific values, rather than a boolean, like a timeout on an SQL query. Usually it is not too hard wired in a production grade system but configurable. It is impossible to achieve this behavior with @QueryHints({@QueryHint...}) since the value of QueryHint is not going through on expression language lookup (which would help to get the value at least from a properties/yaml file). Another possibility I see, and it is somewhat covered in this ticket, is that the JpaRepository interface methods should support some kind of List structure as an input so we can pass them in programatically when we call those methods.

gregturn commented 1 year ago

@ujhazib Can you show an example of a type of query hint you'd like to be able to apply in some repository definition?

gregturn commented 1 year ago

It should be noted that injecting a SpelExpressionParser into the objects that need it to do the evaluation is a bit tricky.

ujhazib commented 1 year ago

Sorry for the slow feedback, was on vacation. One example would be

@QueryHints(
   { @QueryHint(name = org.hibernate.jpa.QueryHints.SPEC_HINT_TIMEOUT, "#{someConfigBean.someTimeoutSetting}") }
)

To detach the timeout setting from a binary compilation and to depend rather on a config file in this case.