8

コードを書い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;
}
4

1 に答える 1

12

どのエラーが表示されるかを投稿していないので、推測する必要があります。

CriteriaBuilder.maxが受け入れるExpression<N>場所N extends Number

同時に、デフォルトでRoot.getPath<Object>は変換できないものを返しますExpression<Number>

したがって、呼び出しを機能させるには、ジェネリックパラメーターを次のmaxように指定する必要があります。root.get

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

Numberここで、実際のタイプのrelationId(など)Longに置き換えることができます。BigInteger

更新: @perissfは、コードの別の問題に対処しました。最大値 (数値) を選択する場合はCriteriaQuery、クエリとして宣言しNumberないようにする必要があります。ElementRelationTypes

于 2013-09-26T08:26:24.870 に答える