2011-08-19 4 views
4

열에 별칭을 사용하면 오류가 발생합니다. 별칭이 없으면 everytinig는 훌륭하게 작동합니다. 그게 무슨 문제입니까? 이것은 간단한 예이지만 실제 프로젝트에서 더 많은 별칭을 사용하여 일부 비 엔티티 클래스에서 결과를 래핑해야하지만이 오류로 인해 수행 할 수는 없습니다. 어떻게 해결할 수 있을까요?열에 별칭을 사용하여 쿼리를 실행하면 오류가 발생합니다.

public List<Long> findAll(Long ownerId) { 
    String sql = "select id as myId from products where ownerId = "+ownerId; 
    SQLQuery query = getSession().createSQLQuery(sql); 
    return query.list(); 
} 

오류 :

WARN [JDBCExceptionReporter:77] : SQL Error: 0, SQLState: S0022 ERROR [JDBCExceptionReporter:78] : Column 'id' not found.

(별칭없이) 사용 : (id 컬럼에 별명)

작동하지

public List<Long> findAll(Long ownerId) { 
    String sql = "select id from products where ownerId = "+ownerId; 
    SQLQuery query = getSession().createSQLQuery(sql); 
    return query.list(); 
} 
+0

매개 변수를 실제로 연결하고 있습니까? "SQL Injection" – gbn

+0

@gbn -이 경우 'Long'외에 주입 할 수있는 것은 무엇입니까? ;) - 그러나 일반 SQL 쿼리를 수행 할 때는 언제나 생각해 보는 것이 좋습니다. – Thomas

+0

@ 토마스 : OP가 SQL 주입에 대해 알지 못한다는 것을 보여줍니다. 문자열 값을 안전하게 처리하면 불일치가 발생합니다. 나중에 Long이 String이되는 것은 무엇입니까? – gbn

답변

6

경우 " 제품 "이 매핑되고, 최대 절전 모드가 가능합니다. "myId"에 대해 모르기 때문에 선택할 수 없습니다. 다음과 같이 시도 할 수 있습니다.

getSession().createSQLQuery(sql).addScalar("myId", Hibernate.LONG) 
+0

작동! 큰 감사 :) – marioosh

+0

때로는 "addScalar"에 대해 잊어 버리고 Google에 오류 코드를 표시하고이 답변을 찾았습니다. 나는 이미 과거에 upvoted했습니다 ( – mulya

관련 문제