当前位置: 首页 > 知识库问答 >
问题:

使用可选在CriteriaBuilder中写入查询

晏阳飙
2023-03-14
@Query(value = "select usd from UserDetail usd where usd.phoneNumber=:phoneNumber")
Optional<UserDetail> findByPhoneNumber(@Valid @Param("phoneNumber") String phoneNumber);
@Override
public Optional<UserDetail> findByCreatedDate(String phoneNumber) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<UserDetail> cq = cb.createQuery(UserDetail.class);
    Root<UserDetail> root = cq.from(UserDetail.class);
    cq.where(cb.equal(root.get("phoneNumber"), phoneNumber))
      .orderBy(cb.desc(root.get("phoneNumber")));
    return em.createQuery(cq).getResultList().get(3);
}

共有1个答案

郭修平
2023-03-14

如果方法返回类型是optional,那就是您必须返回的。

em.createquery(cq).getResultList().get(3)只返回userdetail,所以您需要将其包装为optional.of:

@Override
public Optional<UserDetail> findByCreatedDate(String phoneNumber) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<UserDetail> cq = cb.createQuery(UserDetail.class);
    Root<UserDetail> root = cq.from(UserDetail.class);
    cq.where(cb.equal(root.get("phoneNumber"), phoneNumber))
      .orderBy(cb.desc(root.get("phoneNumber")));
    return Optional.of(em.createQuery(cq).getResultList().get(3));
}

顺便问一下,您确定hardcoded.get(3)是您想要的吗?如果列表为空或元素少于4个,则会引发运行时异常。

 类似资料:
  • 在实际操作中,查询中存在多个查询,因此需要使用CriteriaBuilder构造查询。到目前为止,我得到的最接近的方法是使子查询中选择a,但这不限于,当然: 在Subquery上有许多方法,我想知道是否需要将实体与其属性连接到外部查询中,然后以某种方式将correlate(),但我从EE7 javadocs中不确定correlate()到底做了什么(但correlate()返回一个from,这意味

  • 我有一个关于jpa中的子查询类的问题。我需要创建两个自定义字段的子查询,但是子查询没有多选方法,选择方法有表达式输入参数(在查询中这是选择)和配置方法不合适。 此外,我对联接子查询结果有疑问,是否可能?怎么做呢? 我有: 链延伸度 消息实体 查询包装 我需要创建这个查询(这是查询的一部分,我从谓词中获得的另一部分。JPQL不合适) 在子查询中我做 但是,子查询在params中没有带有Compoun

  • 问题内容: 我有这样的SQL语句: 因此,它为personID提供了“区别”行: 如果我有这样的表: 它会回来 现在,我尝试通过JPA CriteriaBuilder进行此操作。 我的第一个想法是子查询: 但这会产生错误 怎么对这个? 马可 问题答案: 我认为解决方案比看起来简单。您忘记了包含在CriteriaBuilder子查询中。以下代码执行您要查找的查询。 此代码将创建以下查询: 我认为您正

  • 我必须得到特定的数据,如"角色"表已提交状态,我需要状态=1,所有数据从角色表

  • 我想使用JPA 2.0 CriteriaBuilder创建以下SQL查询: 以下是我的课程: Profil: 角色: 角色简介: 我想做的是创建一个函数,使用JPA通过ID获取。 这是我开始做的,但我对JPA是新手,我不知道该怎么做: 我该怎么做?

  • 问题内容: 在阅读The Swift Programming Language时 ,我遇到了以下片段: 您可以使用 if 和 let 一起使用可能缺少的值。这些值表示为 optionals 。可选值包含一个值或包含nil来指示该值丢失。在值的类型后写一个问号(?),以将该值标记为可选。 片段1很清楚,但是片段2发生了什么?有人可以分解并解释吗?它只是使用块的替代方法吗?在这种情况下的确切作用是什么