spring Sping Boot 应用程序中的外部化查询

n8ghc7c1  于 2023-04-19  发布在  Spring
关注(0)|答案(2)|浏览(170)

我正在使用spring-boot 1.5.6 RELEASE,我想做一件基本的事情,将我的查询从存储库中的@Query注解移动到任何xml文件。
经过一番阅读,我发现我们可以使用orm.xmljpa-named-queries.properties来编写我的自定义查询。
我不明白这些XML文件应该放在哪里的文件结构,而且我的项目中没有META-INF文件夹。
示例:
POJO分类:

@Entity
public Class Customer {

private int id;
private String name;

// getters and setters
}

存储库:

public interface CustomerRepository extends PagingAndSortingRepository<Customer,Integer> {

// this query I need from an external xml file as it might be quite complex in terms of joins
@Query("Select cust from Customers cust")
public List<Customer> findAllCustomers();

}

编辑:参考this stackoverflow question。我需要知道这些文件(orm.xmlpersistence.xml)需要存储在哪里,因为我没有META-INF文件夹。
提前感谢!!

pftdvrlh

pftdvrlh1#

resources文件夹中创建META-INF。现在在META-INF文件夹中创建jpa-named-queries.properties文件。
在这个属性文件中编写查询,如下所示:
Customer.findAllCustomerByNamedQuery=Select c from Customer c
其中Customer表示实体类的名称,findAllCustomerByNamedQuery是查询名称
在您的客户存储库中,写入以下内容以调用在属性文件中写入的查询:
List<Customer> findAllCustomerByNamedQuery();

ny6fqffe

ny6fqffe2#

可以使用spring data jpa中的命名查询。

<named-query name="MyData.ultimateFind">
    <query>select d from MyData d where d.column3 = ?1</query>
 </named-query>

要将其与repository方法绑定,您的repository类可以如下所示:

public interface MyDataRepository extends JpaRepository<MyData, Long> {
  List<User> ultimateFind(String dataForColumn3);   
}

另一种方法(更性感,但目前,having problem with java 17)是使用spring-native-query,它从资源中读取sql文件。它允许您使用直接绑定到sql文件的自定义存储库类型(如果需要,还可以使用sql的条件部分)。

相关问题