Hibernate Spring数据JPA和查询组合

Hibernate Spring数据JPA和查询组合,hibernate,spring-data,spring-data-jpa,jpql,jpa-criteria,Hibernate,Spring Data,Spring Data Jpa,Jpql,Jpa Criteria,我的实体类有四个实例变量: 参考Id、账单Id、客户Id和配置文件Id 它们都是字符串变量 我需要至少一个是强制性的。然后我将执行一个select查询 如果填充了多个值,那么我希望将它们组合在“AND”条件中,然后执行select查询。i、 e.如果填写了账单ID和客户ID,则从中选择*。。。其中billingID=。。。和customerID= 同样,如果三个值被填充,那么三个变量之间应该有“AND”条件 我有一个repository类,它扩展了crud repository 除了编写多个查询

我的实体类有四个实例变量:

参考Id、账单Id、客户Id和配置文件Id

它们都是字符串变量

我需要至少一个是强制性的。然后我将执行一个select查询

如果填充了多个值,那么我希望将它们组合在“AND”条件中,然后执行select查询。i、 e.如果填写了账单ID和客户ID,则从中选择*。。。其中billingID=。。。和customerID=

同样,如果三个值被填充,那么三个变量之间应该有“AND”条件

我有一个repository类,它扩展了crud repository

除了编写多个查询方法(即findByBillingID、findByBillingID和CustomerId等)之外,还有没有更简单的方法来实现这一点…

是的。您可以使用和向查询中添加不同的条件。它在功能上与使用HQL查询字符串相同,但它使用了API。因此,在您的情况下,您的代码可以如下所示:

String ref, billing, customer, profile;
//get the values for those here
Criteria crit = session.createCriteria(MyEntity.class);
if(ref != null){
    crit.addRestriction(Restrictions.equals("ref", ref));
}
if(billing != null){
    crit.addRestriction(Restrictions.equals("billing", billing));
}
//...etc
return crit.list();//returns your results

你能告诉我如何在SpringDataJPA的上下文中实现它,而不是使用Crudepository,写下你自己的。使用方法创建一个名为CustomerDao的接口,然后创建一个实现CustomerDaoImpl的类,并使用@Repository对其进行注释。该实现应该有一个SessionFactory类型的字段,并用@Autowired注释。您的XML或Java配置文件还需要定义SessionFactory,类似于您设置存储库的方式。完全按照您的要求执行,它工作得非常完美。在配置文件中配置SessionFactory创建者是一项有点困难的任务,但它成功了。谢谢