JPA 2 标准查询继承

时间:2021-04-30 10:40:37

标签: hibernate jpa criteria hibernate-criteria criteria-api

我有以下实体:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class PartnerEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String externalId;

    @Column(insertable = false, updatable = false)
    private String type;

}

@Entity
@DiscriminatorValue("CP")
public class CompanyEntity extends PartnerEntity {

    private static final long serialVersionUID = 1L;

    @Embedded
    @AttributeOverride(name = "code", column = @Column(name = "category_code"))
    @AttributeOverride(name = "label", column = @Column(name = "category_label"))
    private CategoryEntity category;

}

我有 7 个继承自 PartnerEntity 的实体,其中 4 个实体包含字段类别。

我尝试了以下方法来接收具有特定类型和类别的所有 PartnerEntity:

public List<PartnerEntity > searchPartners(String type, String category) {

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<PartnerEntity > query = cb.createQuery(PartnerEntity .class);

    Root<PartnerEntity > root = query.from(PartnerEntity .class);

    List<Predicate> predicates = new ArrayList<>();
    predicates.add(cb.equal(root.get("type"), type));
    predicates.add(cb.equal(root.get("category").get("code"), category));
}

但我收到此错误:

<块引用>

无法在此上找到具有给定名称 [category] ​​的属性 ManagedType [com.xxx.PartnerEntity]

0 个答案:

没有答案
相关问题