2013-09-26 88 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