Spring JPA-复合键变量的CriteriaQuery 我的场景是,Inventory是根类,InventoryId是复合键类,定义如下: @实体 @资料 公共类清单实现java.io.Serializable{ /**常量serialVersionId*/ 私有静态最终长serialVersionUID=74807136028484L; /**身份证*/ @身份证 私有InventoryId; } @数据 @可嵌入 公共类InventoryId实现java.io.Serializable{ /**常量serialVersionId*/ 私有静态最终长serialVersionUID=6479717401762529315L; /**产品id*/ @列(nullable=false,长度=50) 私有字符串productId; /**分支id*/ @列(nullable=false,长度=50) 私有字符串; }

Spring JPA-复合键变量的CriteriaQuery 我的场景是,Inventory是根类,InventoryId是复合键类,定义如下: @实体 @资料 公共类清单实现java.io.Serializable{ /**常量serialVersionId*/ 私有静态最终长serialVersionUID=74807136028484L; /**身份证*/ @身份证 私有InventoryId; } @数据 @可嵌入 公共类InventoryId实现java.io.Serializable{ /**常量serialVersionId*/ 私有静态最终长serialVersionUID=6479717401762529315L; /**产品id*/ @列(nullable=false,长度=50) 私有字符串productId; /**分支id*/ @列(nullable=false,长度=50) 私有字符串; },java,spring-boot,jpa,spring-data-jpa,Java,Spring Boot,Jpa,Spring Data Jpa,使用以下条件查询: @凌驾 public List<Inventory> getInventoryLevelsPerProduct(String productId,String branchId) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Inventory> cq = cb.createQuery(Inventory.class); Ro

使用以下条件查询:

@凌驾

public List<Inventory> getInventoryLevelsPerProduct(String productId,String branchId) {

    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Inventory> cq = cb.createQuery(Inventory.class);

    Root<Inventory> root = cq.from(Inventory.class);
    List<Predicate> predicates = new ArrayList<>();

    InventoryId inventoryId  = new InventoryId();
           
    if (StringUtils.isNotEmpty(productId)) {
        inventoryId.setProductId(productId);
        predicates.add(cb.equal(root.get("id"), inventoryId ));
    }
    if (StringUtils.isNotEmpty(branchId)) {
        inventoryId.setBranchId(branchId);
        predicates.add(cb.equal(root.get("id"), inventoryId));
    } 
    cq.where(predicates.toArray(new Predicate[0]));
    return entityManager.createQuery(cq).getResultList();
}
public List getInventoryLevelsPerProduct(字符串productId,字符串branchId){
CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Inventory.class);
Root=cq.from(Inventory.class);
列表谓词=新的ArrayList();
InventoryId InventoryId=新的InventoryId();
if(StringUtils.isNotEmpty(productId)){
inventoryId.setProductId(productId);
add(cb.equal(root.get(“id”)、inventoryId));
}
if(StringUtils.isNotEmpty(branchId)){
inventoryId.setBranchId(branchId);
add(cb.equal(root.get(“id”)、inventoryId));
} 
cq.where(谓词toArray(新谓词[0]);
返回entityManager.createQuery(cq.getResultList();
}

如果我传递productId并将其隐藏,它将返回记录。当我们通过一个输入搜索条件时,如何使此查询可行

提前谢谢