首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate CriteriaQuery where - ManyToOne字段

Hibernate CriteriaQuery where - ManyToOne字段
EN

Stack Overflow用户
提问于 2020-04-25 04:52:43
回答 1查看 172关注 0票数 0

这是我的Employee实体/类的片段:

代码语言:javascript
复制
@Entity
@Table
public class Employee {
   ...
   @ManyToOne(.....)
   @JoinColumn(name="department_id")
   private Department department;
}

现在,我想从特定部门获取所有员工(具有特定department_id的员工):

代码语言:javascript
复制
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = builder.createQuery(Employee.class);
Root<Employee> employeeRoot = criteriaQuery.from(Employee.class);

criteriaQuery.select(employeeRoot);
criteriaQuery.where(builder.equal(employeeRoot.get(????????????), id));

这就是我的问题。如何访问Department.id?我知道我必须获取({特定字段}),但我不知道如何获取。我应该以某种方式首先加入这些表吗?期待您的回答!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 14:14:31

您需要创建一个与关系表的连接。例如:

代码语言:javascript
复制
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = builder.createQuery(Employee.class);
Root<Employee> employeeRoot = criteriaQuery.from(Employee.class);

Join<Employee, Departament> join = from.join("department", JoinType.INNER);
criteriaQuery.where(builder.equal(join.get("specific_fied"), your_specific_fied));

TypedQuery<Employee> typedQuery = session.createQuery(criteriaQuery);

List<Employee> employees = typedQuery.getResultList();
for (Employee e : employees) {
    System.out.println(e.getName());
}

session.getTransaction().commit();
session.close();
entityManagerFactory.close();

如果您想要与此查询相同的任何内容:

SELECT c, p.name FROM Country c LEFT OUTER JOIN c.capital p

您可以构建以下内容:

代码语言:javascript
复制
  CriteriaQuery<Country> q = cb.createQuery(Country.class);
  Root<Country> c = q.from(Country.class);
  Join<Country> p = c.join("capital", JoinType.LEFT);
  q.multiselect(c, p.get("name"));

如果您构建了与此查询相同的内容:

SELECT c FROM Country c JOIN FETCH c.capital

您可以构建以下内容:

代码语言:javascript
复制
  CriteriaQuery<Country> q = cb.createQuery(Country.class);
  Root<Country> c = q.from(Country.class);
  Fetch<Country,Capital> p = c.fetch("capital");
  q.select(c);

有关更多示例,请参阅FROM clause (JPQL / Criteria API)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61417261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档