【问题标题】:Case Statement with multiple conditions using hibernate criteria使用休眠条件的具有多个条件的案例语句
【发布时间】:2020-02-25 15:13:30
【问题描述】:

选择状态 = 'A' 和登录 ='Y' 的情况 然后“允许登录”否则“启用登录状态”结束为 UserLoginStatus 来自用户。

我已经从 stackoverflow 验证了几个答案,但找不到处理上述情况的代码。

以下示例代码适用于单一条件(状态='A'时的情况)。

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

如何使用条件构建器处理具有多个条件的案例条件。

【问题讨论】:

  • 您阅读过文档吗?
  • 我阅读了文档,但找不到解决方案。请您帮忙。我可以添加另一个和条件相同的 sql 查询吗?

标签: java hibernate-criteria


【解决方案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;
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 2012-08-28
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多