如何将Json对象映射到JPA规范以进行搜索查询
我有一个RequestMaping,它将搜索json类作为body参数。 我想从这个搜索json对象创建适当的规范,以便像这样传递到我的存储库:如何将Json对象映射到JPA规范以进行搜索查询,jpa,dynamic,specifications,Jpa,Dynamic,Specifications,我有一个RequestMaping,它将搜索json类作为body参数。 我想从这个搜索json对象创建适当的规范,以便像这样传递到我的存储库: pagesResult = myRepository.findAll(mySpec) @Override public Phones searchPhones(int pageNumber, Map<String, String> searchObject) { List<PhoneSpecifica
pagesResult = myRepository.findAll(mySpec)
@Override
public Phones searchPhones(int pageNumber, Map<String, String> searchObject) {
List<PhoneSpecification> specificationslist = new ArrayList<>();
generateSpecifications(searchObject, specificationslist); //fill specificationList
Specification<Phone> specificationOfPhone;
for (PhoneSpecification spec :
specificationslist) {
//this is my problem , I had to dynamically increase my Specification like this:
specificationOfPhone = specificationOfPhone + Specifications.and(spec);
}
mobileRepository.findAll(specificationOfPhone);
if(specificationslist.size()>0){
finalSpecification = Specifications.where(specificationslist.get(0)) ;
}
for (int i=1 ; i<specificationslist.size(); i++) {
finalSpecification = Specifications.where(finalSpecification).and(specificationslist.get(i));
}
我在解析和向规范动态添加项方面遇到了问题。我想实现这样的目标:
pagesResult = myRepository.findAll(mySpec)
@Override
public Phones searchPhones(int pageNumber, Map<String, String> searchObject) {
List<PhoneSpecification> specificationslist = new ArrayList<>();
generateSpecifications(searchObject, specificationslist); //fill specificationList
Specification<Phone> specificationOfPhone;
for (PhoneSpecification spec :
specificationslist) {
//this is my problem , I had to dynamically increase my Specification like this:
specificationOfPhone = specificationOfPhone + Specifications.and(spec);
}
mobileRepository.findAll(specificationOfPhone);
if(specificationslist.size()>0){
finalSpecification = Specifications.where(specificationslist.get(0)) ;
}
for (int i=1 ; i<specificationslist.size(); i++) {
finalSpecification = Specifications.where(finalSpecification).and(specificationslist.get(i));
}
@覆盖
公用电话搜索电话(int页码,地图搜索对象){
列表规格列表=新的ArrayList();
GenerationSpecifications(searchObject,specificationslist);//填写specificationList
电话的规格;
对于(电话规范:
规格列表){
//这是我的问题,我必须像这样动态增加我的规范:
电话的规格=电话的规格+规格和(规格);
}
mobileRepository.findAll(电话规格);
您可以将代码更改为:
Specifications<Phone> specificationOfPhone = Specifications.where(null);
for (PhoneSpecification spec : specificationslist) {
specificationOfPhone = specificationOfPhone.and(spec);
}
specificationspecificationofphone=规格,其中(空);
用于(电话规格:规格列表){
SPECTIONOFPHONE=PHONE的规格和(spec);
}
我假设PhoneSpecification
正在扩展/实现Specification
规范。其中(null);
将返回可与其他规范链接的空规范
因为
规范
扩展了规范
,您可以将其与findAll
方法一起使用。您可以将代码更改为:
Specifications<Phone> specificationOfPhone = Specifications.where(null);
for (PhoneSpecification spec : specificationslist) {
specificationOfPhone = specificationOfPhone.and(spec);
}
specificationspecificationofphone=规格,其中(空);
用于(电话规格:规格列表){
SPECTIONOFPHONE=PHONE的规格和(spec);
}
我假设PhoneSpecification
正在扩展/实现Specification
规范。其中(null);
将返回可与其他规范链接的空规范
因为
规范
扩展了规范
,所以您可以将其与findAll
方法一起使用。我最终通过添加第一个规范的位置来实现这一点,并通过如下添加来处理所有问题:
pagesResult = myRepository.findAll(mySpec)
@Override
public Phones searchPhones(int pageNumber, Map<String, String> searchObject) {
List<PhoneSpecification> specificationslist = new ArrayList<>();
generateSpecifications(searchObject, specificationslist); //fill specificationList
Specification<Phone> specificationOfPhone;
for (PhoneSpecification spec :
specificationslist) {
//this is my problem , I had to dynamically increase my Specification like this:
specificationOfPhone = specificationOfPhone + Specifications.and(spec);
}
mobileRepository.findAll(specificationOfPhone);
if(specificationslist.size()>0){
finalSpecification = Specifications.where(specificationslist.get(0)) ;
}
for (int i=1 ; i<specificationslist.size(); i++) {
finalSpecification = Specifications.where(finalSpecification).and(specificationslist.get(i));
}
if(规格列表大小()>0){
finalSpecification=规格。其中(specificationslist.get(0));
}
对于(int i=1;i我最终通过将where添加到第一个规范中来实现这一点,并通过如下方式添加来处理所有问题:
pagesResult = myRepository.findAll(mySpec)
@Override
public Phones searchPhones(int pageNumber, Map<String, String> searchObject) {
List<PhoneSpecification> specificationslist = new ArrayList<>();
generateSpecifications(searchObject, specificationslist); //fill specificationList
Specification<Phone> specificationOfPhone;
for (PhoneSpecification spec :
specificationslist) {
//this is my problem , I had to dynamically increase my Specification like this:
specificationOfPhone = specificationOfPhone + Specifications.and(spec);
}
mobileRepository.findAll(specificationOfPhone);
if(specificationslist.size()>0){
finalSpecification = Specifications.where(specificationslist.get(0)) ;
}
for (int i=1 ; i<specificationslist.size(); i++) {
finalSpecification = Specifications.where(finalSpecification).and(specificationslist.get(i));
}
if(规格列表大小()>0){
finalSpecification=规格。其中(specificationslist.get(0));
}
对于(int i=1;没有用于规范的方法。add()你看到我将其更改为规范非规范?这是一种方法和非添加。谢谢你的回答,但它不起作用。请检查我的。没有用于规范的方法。add()你看到了吗,我把它改成了规范
非规范
?这是一种方法和非添加
。谢谢你的回答,但它不起作用。检查我的方法。