我有以下实体:
@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]