摘要:[Hibernate] 如何使用CreateSQLQuery第一個字串欄位被吃掉問題
我嘗試使用CreateSQLQuery查詢數筆資料
查詢的資料表 [PC],所有的資料如下
ID | PcName | IP | OS |
1 | Eric-PC | 192.168.2.11 | Windows 7 |
2 | Rose-PC | 192.168.2.101 | Windows 7 |
3 | Even-PC | 192.168.2.33 | Windows XP |
4 | Huang-PC | 192.168.2.45 | Windows 7 |
5 | Kevin-PC | 192.168.2.10 | Windows 8 |
接著開始撰寫程式碼,只要輸出兩個欄位,分別為PcName和IP,範例如下
String osName = "Windows 7";
String sql = "SELECT PcName, IP FROM PC WHERE OS= :osType ";
//因為不透過Hibernate直接轉換成對應的模型,所以用Object array來接
List
執行後輸出結果
E | 192.168.2.11 |
R | 192.168.2.101 |
H | 192.168.2.45 |
筆數是正確了,但為什麼第一個欄位(電腦名稱)的結果怪怪的,它只印出了第一個字元
我拜了大神之後求得兩種解法
1. 用SQL的Convert
//改一下SQL語法
String sql = "SELECT CONVERT(nvarchar(100), PcName) AS PcName, IP FROM PC WHERE OS= :osType ";
不過如果字串長度剛好超過Convert所定義的數值的話可能還是會有問題,簡單的或許還可以這樣用
2. 使用addScalar協助定義欄位類型
List
修改寫法之後我再轉型它就不會再把第一個欄位的結果給吃掉了
筆記!