从 jpa 数据模型查询特定对象

Querying specific object from a jpa datamodel

我对使用像 hibernate 这样的 orm 映射器进行查询有疑问。假设你有这样一个数据库模型

class A {
    int i;
    B b;
}

class B {
    int j;
}

如果我想保存一个对象,休眠引擎可以通过级联查询一次添加所有 class 个实例。如果我按 class A.

的值从数据库中获取对象,这也将起作用

但是,如果我想要 Class A 的所有条目都包含 B 的对象且值为 j = 10 怎么办?

在 SQL 我会有这样的东西:

SELECT * FROM A a, B b WHERE a.ref = b.ref AND b.j = 10;

但是对于 ORM,ref 是用对象引用建模的。我应该如何创建这样的查询?首先:我必须写一个查询吗?其次:hibernate 将如何解析这些引用 a.ref = b.ref

您应该可以使用:

A findByBJ(int j);

如果您的表已正确保存并具有某种 OneToOne 关系。

您可以浏览 JPQL 中的引用:

SELECT a FROM A a WHERE a.b.j = 10;

定义一个 EntityManager:

  EntityManager em;

然后:

  CriteriaBuilder builder = em.getCriteriaBuilder();
  CriteriaQuery<A> query = builder.createQuery(A.class);
  Root<A> from = query.from(A.class);
  from.fetch("b");
  Predicate predicate = builder.and(predicate, builder.equal(from.get("b").get("j"), 10);
  TypedQuery<A> typedQuery = em.createQuery(query.select(from).where(predicate));
  List<A> results = typedQuery.getResultList();