亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有分頁、排序和規范的 JPA

具有分頁、排序和規范的 JPA

慕的地6264312 2023-07-19 16:12:41
在我的Spring boot項目中,我需要查詢一個entity具有,和XrayVulnerabilityEntity功能的表。pagingsortingspecificationPaging并且sorting實施似乎還可以。但是當我添加時Specification,它throws an error是這樣的:導致:org.springframework.beans.factory.BeanCreationException:創建名稱為“xrayVulnerabilityRepository”的bean時出錯:調用init方法失敗;嵌套異常是 java.lang.IllegalArgumentException:要么對除一次輸入的 Pageable 和 Sort 之外的所有參數使用 @Param,要么根本不使用 @Param!我使用的存儲庫:@Repositorypublic interface XrayVulnerabilityRepository extends PagingAndSortingRepository<XrayVulnerabilityEntity,XrayVulnerabilityPK> , JpaSpecificationExecutor<XrayVulnerabilityEntity>{    @Query("SELECT x FROM XrayVulnerabilityEntity x,DomainArtifactEntity d WHERE d.domainOrgName=:domainOrgNameParam AND x.domainArtifactId=d")    public Page<XrayVulnerabilityEntity> findAll(@Param(value = "domainOrgNameParam") String domainOrgName,Specification<XrayVulnerabilityEntity> spec, Pageable pageable);    @Query("SELECT COUNT(x) FROM XrayVulnerabilityEntity x,DomainArtifactEntity d WHERE d.domainOrgName=:domainOrgNameParam AND x.domainArtifactId=d")    public Long getCount(@Param(value = "domainOrgNameParam") String domainOrgName,Specification<XrayVulnerabilityEntity> spec);}我在實施時做錯了什么嗎Specification?
查看完整描述

3 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

方法聲明:


public List<XrayVulnerabilityEntity> findAll(Specification<XrayVulnerabilityEntity> spec, Pageable pageable);

執行:


Specification specification = new Specification<XrayVulnerabilityEntity>() {

    @Override

    public Predicate toPredicate(Root<XrayVulnerabilityEntity> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {

    List<Predicate> predicates = new ArrayList<>();

    predicates.add(criteriaBuilder.equal(

        root.join("domainArtifactId").get("id"), root.get("id")));

    predicates.add(criteriaBuilder.and(

       root.get("domainArtifactId").get("domainOrgName"), "domainOrgNameString"));


    return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));

    }

};


Pageable page = PageRequest.of(0, 5, new Sort(Sort.Direction.ASC, "id") );



List<XrayVulnerabilityEntity> xrayVulnerabilityEntitylists = xrayVulnerabilityEntityRepo.findAll(specification, page);



查看完整回答
反對 回復 2023-07-19
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

我像這里一樣解決了這個問題;


@PostMapping(value = "/search")

public List<Customer> search(@RequestBody List<SearchCriteriaRequest> criteriaRequest, Pageable page) {

    if (criteriaRequest == null || criteriaRequest.size() == 0) {

        return null;

    }

    SpecificationsBuilder builder = new SpecificationsBuilder();

    for (SearchCriteriaRequest criteria : criteriaRequest) {

        builder.with(criteria);

    }

    Specification<Customer> spec = builder.build();

    return customerRepository.findAll(spec, page).getContent();

}


查看完整回答
反對 回復 2023-07-19
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

在此查詢中:


@Query("SELECT COUNT(x) FROM XrayVulnerabilityEntity x,DomainArtifactEntity d WHERE d.domainOrgName=:domainOrgNameParam AND x.domainArtifactId=d")

public Long getCount(@Param(value = "domainOrgNameParam") String domainOrgName,Specification<XrayVulnerabilityEntity> spec);

您正在引用一個參數:domainOrgNameParam,但在方法參數中找不到該參數。如果您使用Specifications,您應該在那里定義所有內容并避免傳遞額外的參數。


查看完整回答
反對 回復 2023-07-19
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號