2013-09-26 90 views
0

想要從表ElementRelationType中獲取組合列relationId的最大值我已經編寫了僅適用於非組合鍵的代碼。我compositKey包含relationId和語言使用jpa條件查詢獲取組合列的最大值

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 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); 
} 

compositClass

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) 
+0

'組合大柱relationId..'的最大值你如何定義'RelationId'最大?你想獲得最大關係ID? –

+0

yes..列中的最大值relaionId。 – Surya

+0

你有沒有嘗試過這樣的東西:'root。 get(「relationLangPack.relationId」)'? –

回答

1

在我看來,這個問題是由複合引起的表達。試試下面的方法訪問該屬性:

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

它的工作。 Thannx寶貴的時間 – Surya