gpt4 book ai didi

java - 如何使用 criteria api 转换以下 sql 查询?

转载 作者:行者123 更新时间:2023-12-02 09:46:09 26 4
gpt4 key购买 nike

我有一个查询,它已经写在扩展 JpaRepository 的存储库中。但我需要在这里添加逻辑运算符。

从帐户 ac 中选择 ac,其中 ac.userId = :userId 且 ac.accountId = :accountID

要求是在客户端提供 userId 或 accountId 时获取帐户详细信息。

public interface GoalPlanRepository extends JpaRepository<GoalPlan, String>{

@Query("select ac from Accounts ac where ac.userId = :accountID ")
public List<Accounts> getCalculateRecurringAmount(@Param("accountID") String accountID, @Param("userId") String userId);

这是我的存储库。我正在 goalPlanDaoImplementation 中实现此方法

    public List<Accounts> getCalculateRecurringAmount(String accountID) {


// CriteriaBuilder cb = em.getCriteriaBuilder();
// CriteriaQuery<Accounts> cq = cb.createQuery(Accounts.class);
//
// Root<Accounts> acc = cq.from(Accounts.class);
//
// Predicate accountIDPredicate = null;
// Predicate userIdPredicate = null;
//
// if(accountID != null) {
// accountIDPredicate = cb.equal(acc.get("accountID"), accountID);
// }
//
// if(userId != null) {
// userIdPredicate = cb.equal(acc.get("userId"), userId);
// }
//
//
// cq.where(accountIDPredicate, userIdPredicate);
//
// TypedQuery<Accounts> query = em.createQuery(cq);

List<Accounts> goalPlan = null;
goalPlan = goalPlanRepository.getCalculateRecurringAmount(accountID);
return goalPlan;
//return query.getResultList();




}

评论部分是我尝试做的。提前致谢。 :)

最佳答案

我不完全确定我是否理解正确,但这也许会有所帮助:

final ArrayList<Predicate> predicates = new ArrayList<Predicate>();
if(accountID != null)
predicates.add(cb.equal(acc.get("accountID"), accountID));
}
if(userId != null) {
predicates.add(cb.equal(acc.get("userId"), userId));
}

switch(predicates.size()){
case 0:
return null;
//or maybe just continue to return all accounts...
case 1:
cq.where(predicates.get(0));
break;
default:
cq.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
}

关于java - 如何使用 criteria api 转换以下 sql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56634960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com