amo*_*fis 10 criteria-api jpa-2.0
我想将我的JPAQL查询转换为条件API查询.
考虑这样的查询:
SELECT e FROM Entity e WHERE e.parent.id = :parentId
Run Code Online (Sandbox Code Playgroud)
WHERE 部分转换为:
Path<Long> parentId = root.get(Entity_.parent).get(ParentEntity_.id);
Predicate whereParentId = builder.equal(parentId, selectedParent.getId());
Run Code Online (Sandbox Code Playgroud)
问题是,如何为WHERE创建谓词,如下所示:
SELECT e FROM Entity e WHERE e.parent.parent.id = :parentId
Run Code Online (Sandbox Code Playgroud)
如何创建Path父ID的父级?
如果您显示的JPQL正在工作,那么我将假设您ParentEntity持有对其父级的引用(以parent字段的ParentEntity形式).因此,这样的事情应该有效:
Path<Long> parentId = root.get(Entity_.parent)
.get(ParentEntity_.parent)
.get(ParentEntity_.id);
Predicate whereParentId = builder.equal(
parentId, selectedParent.getId()
);
Run Code Online (Sandbox Code Playgroud)
我已经完成了类似的事情,但是对于一个实体(同时Customer是子实体和父实体,并通过类型parent字段引用其父实体Customer),这样的事情完全正常:
query.select(customer)
.where(criteriaBuilder.equal(
customer.get("parent").get("parent").get("id"),
criteriaBuilder.parameter(int.class, "parentId"))
);
List<Customer> customers = em.createQuery(query)
.setParameter("parentId", john.getId()).getResultList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7015 次 |
| 最近记录: |