使用jpa条件查询获取复合列的最大值

使用jpa条件查询获取复合列的最大值,jpa,criteria-api,Jpa,Criteria Api,要从表ElementRelationType中获取复合列relationId的最大值,我已经编写了只适用于非复合键的代码。我的CompositeKey包含relationId和language CriteriaBuilder cb1 = entityManager.getCriteriaBuilder(); CriteriaQuery<Integer> cq1 = cb1.createQuery(Integer.class); Root<ElementRel

要从表ElementRelationType中获取复合列relationId的最大值,我已经编写了只适用于非复合键的代码。我的CompositeKey包含relationId和language

CriteriaBuilder cb1 = entityManager.getCriteriaBuilder();
     CriteriaQuery<Integer> cq1 = cb1.createQuery(Integer.class);
     Root<ElementRelationTypes> root = cq1.from(ElementRelationTypes.class);
     cq1.select(cb1.max(root.<Integer>get("relationId")));
     TypedQuery<Integer> qr = entityManager.createQuery(cq1);
     Integer i=qr.getResultList().get(0);
复合类

    public class RelationId implements Serializable {


private Integer relationId;
private Language language;


@JoinColumn(name=PersistenseConstants.ELEMENT_RELATION_TYPE_COL_RELATION_ID)
public Integer getRelationId() {
    return relationId;
}

public void setRelationId(Integer relationId) {
    this.relationId = relationId;
}

@OneToOne
@JoinColumn(name=PersistenseConstants.LANGUAGE_ENTITY_COL_LANG_CODE)
public Language getLanguage() {
    return language;
}

public void setLanguage(Language language) {
    this.language = language;
}
例外情况

 java.lang.IllegalArgumentException: Unable to resolve attribute [relationLangPK.relationId] against path

16:14:16,757 ERROR [stderr] (http-/0.0.0.0:8080-1)  at     org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:118)

16:14:16,757 ERROR [stderr] (http-/0.0.0.0:8080-1)  at     org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:223)

16:14:16,757 ERROR [stderr] (http-/0.0.0.0:8080-1)  at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:194)

在我看来,这个问题是由复合表达式引起的。尝试通过以下方式访问此属性:

cq1.select(
    cb1.max(
        root.<ElementRelationTypes>get("relationLangPK").<Integer>get("relationId")
    )
);
cq1.select(
cb1.max(
root.get(“relationLangPK”).get(“relationId”)
)
);

合成列关系ID的最大值..
如何定义
关系ID的最大值?是否要获取最大关系ID?是..列relationId中的最大值。是否尝试过类似的操作:
root.get(“relationLangPack.relationId”)
?尝试过但仍不工作…请解释“不工作”。到底是什么不符合预期?是否存在任何异常(post消息和堆栈跟踪)?
cq1.select(
    cb1.max(
        root.<ElementRelationTypes>get("relationLangPK").<Integer>get("relationId")
    )
);