首页 > 解决方案 > 如何使用非实体超类引用 CriteriaQuery 中的子类字段

问题描述

ListCodes我正在尝试为作为实体的类设置 CriteriaQuery 谓词。ListCodes还有一个称为AuditableMappedSuperClass 的超类。

当我尝试这样做时

CriteriaQuery < ListCodes > criteriaQuery = builder.createQuery(ListCodes.class);
Root < ListCodes > listCodesRoot = criteriaQuery.from(ListCodes.class);
Predicate predicate = builder.equal(listCodesRoot.get("codeTypeCode"), "STATUSIND");
criteriaQuery.where(predicate);

我收到一个异常,codeTypeCode无法在Auditable. 但是,当我尝试使用treat并为其创建根的替代解决方案时Auditable,我遇到了一个异常,即 Auditable 只是一个 MappedSuperClass 所以我不能使它成为根。

这里的正确解决方案是什么?如何在 MappedSuperClass 的子类上使用 CriteriaQuery?

编辑:这是 Auditable 和 ListCodes 的相关标题

@MappedSuperclass
@EntityListeners({AuditListener.class})
@XmlRootElement(namespace=WebServiceConstants.MESSAGES_NAMESPACE)
@XmlType(namespace=WebServiceConstants.MESSAGES_NAMESPACE)
public class Auditable {
@Entity
@Table (name="TB_LIST_CODE")
public class ListCodes extends Auditable implements java.io.Serializable {

    @Column(name="CODE_TYPE_CODE")      
    private String codeTypeCode; 

标签: javajpajpa-2.0criteriajavax.persistence

解决方案


推荐阅读