2011-08-19 18 views
4

當我使用別名列的時候出現錯誤。沒有別名everytinig工程很好。那有什麼問題?這是一個簡單的例子,但是需要在實際項目中使用更多的別名來包裝某些非實體類的結果,但不能因爲這個錯誤。如何解決這個問題?列上查詢使用別名給出錯誤

不工作(別名爲在id列):

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.

WORKING(沒有別名):

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注入」 – gbn

+0

@gbn - 在這種情況下除了'Long'還能注入什麼? ;) - 但是,在進行普通的SQL查詢時總是考慮一下仍然不錯。 – Thomas

+0

@Thomas:它顯示OP不知道SQL注入。如果字符串值安全處理,則顯示不一致。龍以後什麼變成了絃樂? – gbn

回答

6

如果你的「產品「被映射,休眠很可能不知道「myId」,因此無法選擇它。 你可以嘗試這樣的:

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

作品!非常感謝:) – marioosh

+0

有時我忘了「addScalar」,然後谷歌的錯誤代碼,並找到我已經upvoted這個答案已經在過去 – mulya