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

标签 jpa criteria-api

我想获得列 relationId 的最大值来自表 ElementRelationType我已经写了代码但它给出了错误

CriteriaBuilder cb1 = entityManager.getCriteriaBuilder();
CriteriaQuery<ElementRelationTypes> cq1 = cb1.createQuery(ElementRelationTypes.class);
Root<ElementRelationTypes> root = cq1.from(ElementRelationTypes.class);
cq1.select(cb1.max(root.get("relationId")));

select 和 max 都给出错误
如何获得整数最大值
public class ElementRelationTypes {

private RelationId relationLangPK=new RelationId(); 

private Country country;
private Status status;


@EmbeddedId
public RelationId getRelationLangPK() {
    return relationLangPK;
}
public void setRelationLangPK(RelationId relationLangPK) {
    this.relationLangPK = relationLangPK;
}

@Transient
public Integer getRelationId() {
    return getRelationLangPK().getRelationId();
}
public void setRelationId(Integer relationId) {
    getRelationLangPK().setRelationId(relationId);
}
@Transient
public Language getLanguage() {
    return getRelationLangPK().getLanguage();
}
public void setLanguageCode(Language language) {
    getRelationLangPK().setLanguage(language);
}


public class RelationId implements Serializable {
private static final long serialVersionUID = 1L;
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;
}

最佳答案

您没有发布您收到哪些错误,所以我必须猜测。

CriteriaBuilder.max接受 Expression<N>哪里N extends Number
同时Root.get默认返回 Path<Object>不可转换为 Expression<Number> .

因此,请调用 max您需要为 root.get 指定泛型参数的工作:

cq1.select(cb1.max(root.<Number>get("relationId")));

在这里你可以替换 Number实际类型为 relationId ( LongBigInteger 等)

更新: @perissf addressed您的代码的另一个问题。如果您要选择最大值(数字),您应该声明您的 CriteriaQuery作为对 Number 的查询不是 ElementRelationTypes

关于jpa - 使用 jpa 条件查询获取列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022623/

相关文章:

java - 在 OpenSessionInViewFilter 之后没有定义名为 'sessionFactory' 的 bean

java - jpa:具有自引用和非抽象父类(super class)的继承

java - 指定应考虑进行不同计算的列

java - JPA 标准 : Convert int to String then select from substring of resulting String

java - 用于 WITH 子句和 FROM 子句中的子查询的 JPA Criteria API

java - Mysql错误: field 'XXX' doesn't have a default value

hibernate - JPA 中referencedColumnName 的用途是什么?

jpa - 在 JPA2 标准中选择 ...

java - CriteriaBuilder 查询在两列之间使用 Like

java - 使用 Playframework 持久化多对多对象