使用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")));