hi guys I need help in the Spring boot neo4j repository
@Query(" MATCH (u:User) WHERE u.userId =~ '(?i)'+$userId RETURN u.userId ")
String userExistsById(@Param("userId") String pStrUserId);
instead of writing query here (inside the interface repo) is there any way can I substitute the query from external properties file
This was a simple query example but I actually had a big query which looks very bad and difficult to understand if I put it in interface file.
Yes, you should be able to do this. I think I would try to use the @Value annotation in Spring. I haven't used that annotation to source in a query before, but theoretically, I think it would still work. Couple links down below for more info on it. Hope this helps!
* https://www.baeldung.com/spring-value-annotation
* https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Value.html
You can use named queries with Spring Data Neo4j.
This way you just define the method as it is without the query annotation:
interface UserRepository extends Neo4jRepository<User, IdentifierType> {
User userExistsById(@Param("userId") String pStrUserId);
}
And define the query in META-INF a file called neo4j-named-queries.properties (default name) where you define the query in this form:
UserRepository.userExistsById="MATCH (u:User) WHERE u.userId =~ '(?i)'+$userId RETURN u.userId"
An example can be found in our test base:
https://github.com/spring-projects/spring-data-neo4j/blob/ee60a1faf643f3d033c1d40eb3b3ed527bf3cb46/src/test/java/org/springframework/data/neo4j/integration/imperative/repositories/PersonRepository.java#L104
https://github.com/spring-projects/spring-data-neo4j/blob/78bb07356bd6d646bbc08ad1adcb1509c51ab655/src/test/resources/META-INF/neo4j-named-queries.properties