未使用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如何获得多行数据,不知道小伙伴们都看明白了没有。还有不懂的地方可以随时来咨询爱站技术频道小编,小编会帮助大家解决问题的。