有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用hibernate条件的多条件java Case语句

在状态为'A'和登录为'Y'时选择大小写 然后“允许登录”或“启用登录状态”以UserLoginStatus结束 来自用户

我已经验证了stackoverflow的一些答案,但找不到处理上述情况的代码

下面的示例代码将适用于单一条件(status='A')

**CriteriaBuilder cbr = session_hiber.getCriteriaBuilder();
cbr.selectCase()
.when(cbr.equal(path.get("status"), "A"), "Login Allowed")
.otherwise("Enable the Login Status")
.alias("UserLoginStatus");**

如何使用criteriaBuilder处理具有多个条件的案例标准


共 (1) 个答案

  1. # 1 楼答案

    我在写同一个场景时看到了这篇文章

    下面的代码对我有用。通过创建谓词列表,然后将其传递到when子句中

    List<Predicate> casePredicates = getcasePredicate(criteriaBuilder,contractBidRoot);
    criteriaBuilder.selectCase()
                        .when(criteriaBuilder.and(casePredicates.toArray(new
                        Predicate[casePredicates.size()])), "DISCARD")
                        .otherwise(contractBidRoot.get(Constant.STATUS))));
    
    public List<Predicate> getcasePredicate(CriteriaBuilder criteriaBuilder, Root<ContractBid> contractBidRoot)
    {
           List<Predicate> casePredicates = new ArrayList<>(); 
           casePredicates.add(criteriaBuilder.lessThanOrEqualTo(contractBidRoot.get("date"),
           LocalDateTime.now()));
           casePredicates.add(criteriaBuilder.equal(contractBidRoot.get("status"), "DONE"));
           return casePredicates;
    }