2012-05-15 5 views
0

이 JPQL은 작동하지만 이전에는 아무 이유없이 고장났습니다. 이제 이상한 예외가 생깁니다 :내 JPQL이 작동하지 않는 이유는 무엇입니까?

이는 내 코드에서 landKod라는 이름의 충돌이 있음을 나타내는 것 같습니다.

@Override 
public List<Region> getRegionsByLandkod(String landKod) { 

    List<Region> regionsList = null; 


try { 

    Query query = em.createNamedQuery("getRegionsByLandkod"); 
    query.setParameter("landKod", landKod); 
    regionsList = (List<Region>) query.getResultList(); 

} catch(Exception e){ 
    logger.info("Kunde inte hitta någon region med landkod: "+landKod, e); 
} 

return regionsList; 
} 

당신이 날이 오류를 해결하는 데 도움 수 :

import java.io.Serializable; 

import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 

@Entity(name = "Region") 
@Table(name="TP197_REGION") 

@NamedQueries({ 
    @NamedQuery(name = "getAllValidRegions", query = "SELECT r FROM Region r WHERE r.histKod = 'A'"), 
    @NamedQuery(name = "getRegionsByLandkod", query = "SELECT r FROM Region r WHERE r.landKod = :landKod") 
}) 

public class Region implements Serializable { 

    @Id 
    private int regionId; 

    @ManyToOne 
    @JoinColumn(name="landKod", referencedColumnName="landKod") 
    private LandKod landKod ; 

    private String histKod ; 
    private String regionForkort; 
    private String regionRubrik; 
    private String regionBeskr; 

    public Region() { 
     super(); 
    } 


    public int getRegionId() { 
     return regionId; 
    } 


    public void setRegionId(int regionId) { 
     this.regionId = regionId; 
    } 


    public String getRegionForkort() { 
     return regionForkort; 
    } 

    public void setRegionForkort(String regionForkort) { 
     this.regionForkort = regionForkort; 
    } 

    public String getRegionRubrik() { 
     return regionRubrik; 
    } 

    public void setRegionRubrik(String regionRubrik) { 
     this.regionRubrik = regionRubrik; 
    } 

    public String getRegionBeskr() { 
     return regionBeskr; 
    } 

    public void setRegionBeskr(String regionBeskr) { 
     this.regionBeskr = regionBeskr; 
    } 


    public String getHistKod() { 
     return histKod; 
    } 


    public void setHistKod(String histKod) { 
     this.histKod = histKod; 
    } 


    public String getRegionFormatted() { 
     if(regionForkort!=null && regionForkort.length()>0) { 
      return regionForkort + " " + regionRubrik; 
     } else { 
      return regionRubrik; 

     } 
    } 


    public LandKod getLandKod() { 
     return landKod; 
    } 


    public void setLandKod(LandKod landKod) { 
     this.landKod = landKod; 
    } 


} 

여기가 매개 변수로 문자열을 수있는 방법을 구현의 : 여기에 소스는?

답변

1

LandKod 개체 대신 getRegionsByLandkod을 String으로 호출하는 것처럼 보입니다. 매개 변수가 올바른 경우이 쿼리를 사용하는 위치를 확인하십시오.

public List<Region> getRegionsByLandkod(String landKod) { 

그것은이해야 하나 :

+0

대답 주셔서 감사합니다. 제 동료가 Region 및 LandKod 클래스에 대한 업데이트를 수행했기 때문에 다음 문장 대신 'SELECT r FROM Region r WHERE r.landKod.landKod = : landKod' 명령으로 변경하여 문제를 해결할 수 있습니다. –

2

문제는이 라인

public List<Region> getRegionsByLandkod(LandKod landKod) { 

또는 당신이 LandKod로 문자열을 변환하고 쿼리 매개 변수로 그를 사용한다.

(아니면 landKod 속성의 문자열 유형을 할 수있는 지역 클래스를 변경할 수 있습니다.)

관련 문제