我们的表中有以下员工数据,我们需要找到标志为false的所有员工,如果报告人标志为true,即使该标志为false,我们也应该排除经理
样本数据
id name manager_name flag
1 a null false
2 b a true
3 c d false
4 e null false
5 f e false
输出应为
id name manager_name flag
3 c d false
4 e null false
5 f e false
如何使用Hibernate Criteria builder实现上述要求?
在SQL中,这是使用下面的查询实现的
select * from employee where flag = false and id not in (
select e1.id from employee e1, employee e2 where e1.name = e2.manager_name
and e2.flag= true)
添加到Employee类---
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="managerName", referencedColumnName="name",insertable=false,
updatable=false)
private Employee manager;
条件查询---
CriteriaBuilder cb = em.getCriteriaBuilder() ;
CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
Root<Employee> root = cq.from(Employee.class);
Subquery<Integer> sub = cq.subquery(Integer.class);
Root<Employee> subRoot = sub.from(Employee.class);
Join <Employee,Employee> empJoin = subRoot.join("manager",JoinType.INNER);
Predicate subP2 = cb.equal(subRoot.get("flag"),true);
sub.where(subP2);
sub.select(empJoin.get("id"));
Predicate flagP = cb.equal(root.get("flag"),false);
Predicate idNot = cb.not(root.get("id").in(sub)) ;
Predicate finalP = cb.and(flagP,idNot);
cq.where(finalP);
TypedQuery<Employee>query = em.createQuery(cq.select(root));
List<Employee> result = query.getResultList();
Hibernate查询生成---
select
employee0_.id as id1_0_,
employee0_.flag as flag2_0_,
employee0_.manager_name as manager_3_0_,
employee0_.name as name4_0_
from
employee employee0_
where
employee0_.flag=?
and (
employee0_.id not in (
select
employee2_.id
from
employee employee1_
inner join
employee employee2_
on employee1_.manager_name=employee2_.name
where
employee1_.flag=?
)
)
问题内容: 我正在尝试使用hibernate条件生成器连接4个表。 下面分别是这些表。 在这4个表中,我想为MySQL执行以下sql脚本: 那么,如何使用Hibernate CriteriaBuilder实现这一目标?请帮助… 预先感谢....... 问题答案: CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQue
问题内容: 该表包含一个ID列,valueHeading列和一个value列。我想将value列分为两个新列,分别称为valueHeading1和valueHeading2,具体取决于值具有哪种valueHeading类型。 所以我想加入这个选择: 编辑:完全加入 使用此选择: 在各自的ID上。我该怎么做呢? 编辑 以说明我要执行的操作: 原始表格: 新表: 问题答案: 在SQLServer200
我想使用JPA 2.0 CriteriaBuilder创建以下SQL查询: 以下是我的课程: Profil: 角色: 角色简介: 我想做的是创建一个函数,使用JPA通过ID获取。 这是我开始做的,但我对JPA是新手,我不知道该怎么做: 我该怎么做?
我有一个带有3列的示例MyTable-id、common_id、creation_date,其中common_id分组条目。 现在,我想使用CriteriaBuilder从每个组中选择所有最新的条目(即每个常见的\u id获取最新的创建日期)。 SQL查询如下所示: 现在我尝试通过编写类似(cb是CriteriaBuilder,root是Root)的内容来创建place谓词: 但不幸的是。数组不是
我的本机查询将类似于:“select*from a inner join b inner join c on a.ida=b.idb and b.lastname=c.lastname and a.name=c.name” 在hibernate中,如果要连接两个表,可以使用@joincolum,如果要通过表B连接表A和表C,可以使用@joincable。 因此在HQL中查询将看起来像:“from