2011-01-10 4 views
0
private ILogin results; 

    public ILogin authenticate(Login login) { 
     System.out.println(login); 
     System.out.println(login.getEmail()); 
     String query = "SELECT email, id FROM Login WHERE email='" 
     + login.getEmail() + "' AND password='" + login.getPassword() + "'"; 
     results = getHibernateTemplate().find(query); 
     System.out.println(results); 
     return results; 
    } 

어떻게 변경합니까 results = getHibernateTemplate().find(query);이 줄에 오류가 있습니다. 하지만 목록 형식이 아닌 ILogin 형식을 원합니다. 여기서 유형 변환을 어떻게 수행합니까? 당신이 여러 결과를 반환 할 수 쿼리를 실행 한 것을,하지만 당신은 단지 하나의 결과를 원하는 -유형 불일치 : 목록에서 ILogin으로 변환 할 수 없습니다.

답변

2

문제는 형식 변환 자체가 아닙니다.

결과 목록에 정확히 하나의 값 (0은 로그인을 찾을 수 없음을 의미하고, 1 이상은 아마도 데이터 어딘가에 문제가 있음을 의미 함)을 확인한 다음 첫 번째 값 (return (ILogin) list.get(0);)을 반환합니다.

약간 별도로 IMO와 같은 쿼리에 직접 데이터를 포함하면 안됩니다. 최대 절전 모드에서 매우 쉽게 쿼리 매개 변수, 사용

String query = "SELECT email, id FROM Login WHERE email=? AND password=?"; 
Object[] parameters = { login.getEmail(), login.getPassword() }; 
List results = getHibernateTemplate().find(query, parameters); 
if (results.size() != 1) { 
    // Probably throw an exception 
} 
// I'm assuming your mapping has been set up appropriately such that 
// the returned value will *be* an `ILogin`. 
return (ILogin) results.get(0); 

마지막으로, 당신은 거의 확실 인스턴스 변수가 될 results을하지 않으을 - 아마 위의 내 예에 따라, 지역 변수이어야한다.

+0

도움을 주셔서 감사합니다. 지금 내가 http://stackoverflow.com/questions/4646548/error-java-lang-classcastexception을 업데이트 한 후이 문제를 조사 할 수 있습니까? – theJava

+0

예,하지만 'new'질문에 목록을 반환하지 않도록 선택 항목을 변경하지 않았습니다. 목록을 ILogin으로 전송할 수 없습니다. –

1

가짜 방법은 getHibernateTemplate().find(query).get(0);을 사용하는 것이지만 로그인이 발견되지 않는 경우 예외가됩니다.

Jon이 말했듯이 검색어에 공백이 있는지 확인하십시오.

1

나는 봄을 추측합니다. :)

List resultsList = getHibernateTemplate().find(query); 
if (resultsList.size() == 1) { 
results = (ILogin)resultsList.get(0); 
} else { 
// error no entity or mutiple entities 
} 

return results. 

이렇게하면됩니다.

관련 문제