当子对象是root时,在父对象上添加where条件。 JPA Criteria API

时间:2016-06-01 09:17:07

标签: jpa-2.0

我有以下方法,为我的查询准备条件。 我想在Parent对象上添加where条件,子对象是我的Root。

如何使用JPA Criteria API实现此目的。

下面是我现有的代码,目前在父对象的where条件被注释掉了。

 private void prepareSearchCriteria(
  Map<String, Object> filters,
  CriteriaBuilder builder,
  Root<Employee> employee,
  List<Predicate> predicates) {

if (filters.containsKey("employeeName")) {
  predicates.add(builder.equal(employee.get("employeeName"),filters.get("employeeName").toString()));
}

if (filters.containsKey("enp.deptName")) {
  // How do add this condition ?
  // predicates.add(builder.equal(employee.get("employeeName"),filters.get("enp.deptName").toString()));
}

}

有人可以帮我这个吗?我是JPA Criteria API的新手。

1 个答案:

答案 0 :(得分:1)

我使用下面的代码解决了它,基本上Path是你要比较的属性。所以从root到你要比较的属性你必须创建路径,然后你可以将它添加到谓词。

if (filters.containsKey("enp.deptName")) {
  Path<Object> path = employee.join("employee").get("deptName"); 
  predicates.add(builder.equal(path, filters.get("employee.deptName")));
}

来源 altuure