如何在Spring数据jpa @Query中引用外部文件中编写的长查询

时间:2017-07-05 23:02:30

标签: spring-boot spring-data spring-data-jpa

  • 我想在外部文件中编写查询(属性或yaml)来加载数据库。 -
  • 这是一个很长的查询,当放在XXXRepository类中的@Query(“long query”)内部时看起来并不好看。
  • 有没有办法在外部文件(properties,yaml,xml或json)中编写此查询,并在弹簧数据jpa中的@Query()中调用该文件?

3 个答案:

答案 0 :(得分:2)

您可以使用命名查询,其中查询必须在名为META-INF/jpa-named-queries.properties的文件中定义。请参阅spring example

User.findBySpringDataNamedQuery=select u from User u where u.lastname=?1

在存储库的注释中按名称引用查询,此处为corresponding repository example from spring

@Query(name = "User.findBySpringDataNamedQuery", countProjection = "u.firstname")
Page<User> findByNamedQueryAndCountProjection(String firstname, Pageable page);

答案 1 :(得分:1)

按照 Ralf Stuckert 的建议,使用 META-INF/jpa-named-queries.properties 来存储命名查询

您可以使用 \ 将大型查询拆分为多行。

示例:

Customer.findNameNative=\
SELECT C.NAME \
FROM CUST_TABLE C \
WHERE CONDITIONS

答案 2 :(得分:0)

我认为您正在寻找一个可以将大查询字符串放置为可读的地方?像Mybatis xml。据我所知,在数据 jpa 中没有方法可以做到这一点。

但是您可以将大查询放在存储过程中,并像下面一样轻松调用它。

Call your_stored_procedure_name(param1,param2):