使用JPA Criteria API选择查询当Entity类具有子类(Embeddable id)时

时间:2016-08-11 09:57:29

标签: java hibernate jpa

我是JPA的新手。

我在以下链接中找到了如何使用JPA criteria API: JPA Criteria API with multiple parameters

谓词的代码是:

Root<CustomerEntity > customerEntity = cq.from(CustomerEntity.class);
List<Predicate> predicates = new ArrayList<Predicate>();
//Adding predicates in case of parameter not being null
    if (param1 != null) {
        predicates.add(
                qb.equal(customerEntity.get("fieldName"), param1));
    }

但我的客户实体类有一个可嵌入的id(复合主键)

如何在此方案中使用JPA条件API

所有可嵌入的id对象值是否也必须用于搜索(选择查询)?

1 个答案:

答案 0 :(得分:1)

你必须做两个步骤:

在可嵌入对象上实现equals和hashcode

像普通

一样创建谓词
  predicates.add(
            qb.equal(customerEntity.get("id"), embeddableId));

<强>更新 如果不填写所有值,则无法搜索整个对象。要搜索一个属性,只需浏览路径并进行比较

predicates.add(
            qb.equal(customerEntity.get("id").get("property1"), embeddableId.getProperty1()));

希望这会有所帮助!