I'm using spring
with CrudRepository
s for database connection.
Now I require a quite long (several lines) sql query that I'd prefer to maintain in a file in classpath, rather than directly inside the code.
But how could I achieve this? My repo looks as follows:
@Query(value = "<my very long sql query>", nativeQuery = true) //how to inject file content?
@Modifying
@Transactional
public void executeSpecificSql();
if your project set up has resources folder, create under
/META-INF/jpa-named-queries.properties
file and add key value pair asrepoClass.methodName=yoursql
. Spring data will pick up.For longer queries it's probably best to use
xml
properties file withCDATA
tags: https://stackoverflow.com/a/19128259/1194415Not sure if it fits your setup, but, this can be done by :
1) Adding your query to a hibernate mapping file using the
<sql-query>
tag2) Define a hibernate config file that includes the above file using the
<mapping>
tag3) Defining a persistence file with a property
"hibernate.ejb.cfgfile"
that points to the above config file4) Use the above property file to build the
EntityManagerFactory
Now, the above Query can be used in the Repository method :
Use below steps.
Create jpa-named-queries.property file in src/main/resources-->META-INF Folder
Defile your query in given properties file. Above screenshot look closely.Here Group is Entity name, while Method should match with method define in Repository interface. Query should have object name instead table name and instead of column name provide variable name given in entity for respective field.
Interface method method with property name