从 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();
我对使用像 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();