使用休眠条件的具有多个条件的案例陈述
Case Statement with multiple conditions using hibernate criteria
SELECT status = 'A' 和 login='Y' 的情况
然后 'Login Allowed' else 'Enable the Login Status' 结束为 UserLoginStatus
来自用户。
我已经从 Whosebug 验证了几个答案,但找不到处理上述情况的代码。
下面的示例代码适用于单一条件(状态='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 处理具有多个条件的案例条件。
我在处理相同场景时遇到了这个 post。
以下代码对我有用。通过创建谓词列表,然后将其传递到 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;
}
SELECT status = 'A' 和 login='Y' 的情况 然后 'Login Allowed' else 'Enable the Login Status' 结束为 UserLoginStatus 来自用户。
我已经从 Whosebug 验证了几个答案,但找不到处理上述情况的代码。
下面的示例代码适用于单一条件(状态='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 处理具有多个条件的案例条件。
我在处理相同场景时遇到了这个 post。
以下代码对我有用。通过创建谓词列表,然后将其传递到 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;
}