Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jpa条件查询获取列的最大值_Jpa_Criteria Api - Fatal编程技术网

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

使用jpa条件查询获取列的最大值,jpa,criteria-api,Jpa,Criteria Api,我想从表ElementRelationType 我已经写了代码,但它给出了错误 CriteriaBuilder cb1 = entityManager.getCriteriaBuilder(); CriteriaQuery<ElementRelationTypes> cq1 = cb1.createQuery(ElementRelationTypes.class); Root<ElementRelationTypes> root = cq1.from(ElementRel

我想从表
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")));


你没有发布你收到了哪些错误,所以我不得不猜测

接受
表达式
,其中
N扩展数字

同时,默认情况下返回
路径
,该路径不可转换为
表达式

因此,要调用
max
工作,您需要将泛型参数指定给
root.get

cq1.select(cb1.max(root.<Number>get("relationId")));
cq1.select(cb1.max(root.get(“relationId”));
在这里,您可以用实际类型的
关系ID
Long
biginger
等)替换
Number


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

的查询,您会得到哪个错误?它适用于非复合键,但在我的情况下relationId是复合键。我已经提供了我的类info@perissf我很抱歉,我只是想说你的回答突出了另一个有用的观点。我不确定它是如何更好,但它肯定是不同的。如果你认为你的答案值得接受,请发表评论。我已经投票赞成你的答案了,没问题。当新信息到达时,刚刚删除了我的答案@苏里亚:现在还不清楚错误的根本原因是什么。也许你应该考虑发表另一个问题。不要忘了包括不起作用的内容、编译器错误(如果有)、异常消息和堆栈跟踪(如果有)@perissf不确定:
public Integer getRelationId()
。我相信这仍然是数字
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;
}
cq1.select(cb1.max(root.<Number>get("relationId")));