我有一个proyect用于加载查询:
@Query(value = SELECT_BY_USER_ID, nativeQuery = true)
Employee findByUserId(@Param("userId") String userId);
在“ SELECT_BY_USER_ID”上是正常的字符串查询。
我在jar外部有一个YML配置,用于加载不同的配置,我也想使用此YML来加载查询。
YML示例:
file:
query1: SELECT * FROM DUAL;
但是我不知道如何直接从@Query值中的文件中加载,我尝试这样做:
@Query(value = ("${file.query1}"), nativeQuery = true)
List<Employee> findByCost();
我该怎么办? 谢谢。
答案 0 :(得分:1)
如果需要从资源文件夹中加载SQL,可以尝试使用spring-data-sqlfile库。它支持从资源加载SQL查询。因此,您只需要将您的SQL查询放入资源文件夹,然后就可以在SqlFromResource批注中引用它们:
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
@SqlFromResource(path = "select_user_by_id.sql")
User findById(int userId);
}
输出如下:
@Repository
public interface UserRepositoryGenerated extends JpaRepository<User, Integer> {
@Query(
value = "SELECT * FROM users WHERE id = :userId",
nativeQuery = true
)
User findById(int userId);
}
答案 1 :(得分:0)
配置的查询。可以从另一个文件加载它们。在资源项目文件夹中创建一个名为/META-INF/jpa-named-queries.properties
的文件,然后进行查询:
Employee.findById=select * from Employee e where e.id=?1
,然后调用您的查询:
@Query(name = "Employee.findById")
Employee findByUserId(String id);
答案 2 :(得分:0)
不幸的是,spring数据似乎不支持使用@Query anno(如@Value)的直接属性引用。 尽管如此,并假设您使用spring-data-jpa和Hibernate,仍可以使用外部.xml文件将查询存储为命名查询,并按方法名称或类似
的方式引用它们。@Query(nativeQuery = true, name="Repository1.query1")
这是一篇很不错的文章:JPA Queries in XML File,它描述了如何将.xml文件放置在预期的orm.xml之外的其他地方