2013-03-05 3 views
0

hsql db에서 특정 값을 읽으려고하는데이 값은 key 및 value가있는 맵으로 반환됩니다. 나는이 맵 값을 받아들이고이를 반복하고 조건에 따라 특정 값을 가져 오는 또 다른 메소드를 가지고있다. 그러면이 값을 모두 목록에 추가 할 것이다. 나를 위해 조건과 첫 번째 방법은 잘 작동하지만, 목록에 값을 추가하는 동안 나는 클래스 캐스트 예외를 테이블에서 값을 읽어Hibernate java.util.ArrayList를 캐스트 할 수 없습니다. 클래스 캐스트 예외

방법에 직면하고있다 :

List<EntityMap> sample = session.createQuery(" FROM EntityMap order by if.ifName").list(); 
for (Iterator<EntityMap> iterator = sample.iterator(); iterator.hasNext();) { 
    entityMap = (EntityMap) iterator.next(); 
    if (IfName != entityMap.getIf().getIfName().toString()) { 
     IfName = entityMap.getIf().getIfName().toString(); 
     entitymapobject = new ArrayList<EntityMap>(); 
    } 
    entitymapobject.add(entityMap); 
    EntityMaplist.put(entityMap.getIf().getIfName(),entitymapobject); 
} 
tx.commit(); 

이 메소드는 반환된다 map이고 db로부터 가져온 값을 가지고 있습니다. 그 후 나는 위의 메소드를 호출하고이 일부 conditions.In에 따라 특정 값을 추출하려고하고 나는 목록에 (trgtPropNameList를) 값을 추가하는 동안 내가 여기를 통해

proertyMap = listPROPERTNAMES(); 
System.out.println("inside loadproperty"); 
for (Iterator<Integer> itr1 = srcEntityIDList.iterator(); itr1.hasNext();) { 
    Integer aInteger = itr1.next(); 
    for (Map.Entry<Long, List<PropertyMap>> entry : proertyMap.entrySet()) { 
     System.out.println(aInteger); 
     System.out.println(entry.getKey()); 
     Long aLong = entry.getKey(); 
     if (aLong.equals(Long.valueOf(aInteger))) { 
      System.out.println("values are equal"); 
      trgtPropNameList.add(((PropertyMap) entry.getValue()).getTgtpropnm()); 
      } 
     } 
    } 
    return trgtPropNameList; 

    if (tx != null) 
     tx.rollback(); 
     e.printStackTrace(); 
    } finally { 
     session.close(); 
    } 
    return EntityMaplist; 
} 

을 반복하고 클래스 캐스트 예외가 발생합니다. 세터와 getter 메소드를 가지고 내 POJO 클래스는

public class PropertyMap implements java.io.Serializable { 

    private PropertyMapId id; 
    private EntityMap entityMap; 
    private String tgtpropnm; 
    private String splitrule; 
    private String combinerule; 
    private String createdby; 
    private Date createdon; 

    public PropertyMap() { 
    } 

    public PropertyMap(PropertyMapId id, EntityMap entityMap) { 
     this.id = id; 
     this.entityMap = entityMap; 
    } 

    public PropertyMap(PropertyMapId id, EntityMap entityMap, String tgtpropnm, 
      String splitrule, String combinerule, String createdby, 
      Date createdon) { 
     this.id = id; 
     this.entityMap = entityMap; 
     this.tgtpropnm = tgtpropnm; 
     this.splitrule = splitrule; 
     this.combinerule = combinerule; 
     this.createdby = createdby; 
     this.createdon = createdon; 
    } 

    public PropertyMapId getId() { 
     return this.id; 
    } 

    public void setId(PropertyMapId id) { 
     this.id = id; 
    } 

    public EntityMap getEntityMap() { 
     return this.entityMap; 
    } 

    public void setEntityMap(EntityMap entityMap) { 
     this.entityMap = entityMap; 
    } 

    public String getTgtpropnm() { 
     return this.tgtpropnm; 
    } 

    public void setTgtpropnm(String tgtpropnm) { 
     this.tgtpropnm = tgtpropnm; 
    } 

    public String getSplitrule() { 
     return this.splitrule; 
    } 

    public void setSplitrule(String splitrule) { 
     this.splitrule = splitrule; 
    } 

    public String getCombinerule() { 
     return this.combinerule; 
    } 

    public void setCombinerule(String combinerule) { 
     this.combinerule = combinerule; 
    } 

    public String getCreatedby() { 
     return this.createdby; 
    } 

    public void setCreatedby(String createdby) { 
     this.createdby = createdby; 
    } 

    public Date getCreatedon() { 
     return this.createdon; 
    } 

    public void setCreatedon(Date createdon) { 
     this.createdon = createdon; 
    } 
} 

사람이 여기 좀 도와 주시겠습니까입니까?

답변

2

entry.getValue()는 캐스팅 문제를 해결해야

for(PropertyMap map : entry.getValue(){ 
    trgtPropNameList.add(((PropertyMap)map).getTgtpropnm()); 
} 

에 유형 List<PropertyMap>의 객체가 아닌 PropertyMap

0

캐스팅 할 수없는 경우 새로 작성하고 작성하십시오.

0

변경 라인

trgtPropNameList.add(((PropertyMap) entry.getValue()).getTgtpropnm()); 

입니다.

관련 문제