未使用JPQL如何获得多行数据

来源:爱站网时间:2022-06-17编辑:网友分享
未使用JPQL如何获得多行数据的相关操作内容你知道是怎样的吗?为了帮助朋友们更好的解决问题,爱站技术频道小编整理了以下相关知识点,有需要的小伙伴随时来参考阅读吧!

问题描述


我正在使用JPA,所以我可以获取一行数据:

Person p = this.em.find(Person.class, 123);
// Note: 'em' is the EntityManager.

但是我如何获得多行?如何获得类似SQL的SELECT * FROM people WHERE age>18;

我知道如何使用JPQL获得多行(在这种情况下为所有行):

TypedQuery query = em.createQuery("SELECT p FROM Person p", Person.class);
List results = query.getResultList();

但是有没有一种方法可以完全不必编写JPQL(即SELECT p FROM Person p)?

注意:这是一项学习练习。我只想坚持使用Jakarta EE(不能使用Spring或Jakarta EE之外的任何其他API)。

思路一:


CriteriaQuery是必经之路,但是另一种“标准”方法是:

// imports

@Entity
@Table(name = "Person")
@NamedQuery(
    name = "Person.queryAll",
    query = "SELECT p FROM Person p")
public class Person implements Serializable {
    ...
}

使用criteria的好处是可以更早地检测到错误。编译时间与运行时间。但是,许多读者/开发人员发现JPQL更易于使用和理解。使用CriteriaQuery如下所示:

//skipping imports & config
  CriteriaBuilder cb = em.getCriteriaBuilder();

  CriteriaQuery q = cb.createQuery(Person.class);
  Root c = q.from(Person.class);
  q.select(c);

思路二:


CriteriaQuery API示例:

            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery criteria = cb.createQuery(Person.class);
            Root root = criteria.from(Person.class);
            criteria.select(root);
            criteria.where(cb.equal(root.get("id"), 123));
            List people = em.createQuery(criteria).getResultList();

 

上述文章内容:未使用JPQL如何获得多行数据,不知道小伙伴们都看明白了没有。还有不懂的地方可以随时来咨询爱站技术频道小编,小编会帮助大家解决问题的。

上一篇:ssh服务器怎么实现自动安装jar项目程序

下一篇:freemarker怎么访问json值

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载