specification查詢不起作用
寫後臺的時候需要加一個specification查詢,只返回屬於該社群的資料。
於是我增加了如圖紅框中的查詢,呼叫了and函式。
specification.and(VehicleSpecs.belongToCommunity(district.getId()));
但是執行後發現,這條查詢沒有按照想法獲取到查詢到資料,相當於這條查詢並沒有作用。
在打斷點之後,發現確實進入了查詢函式裡。
測試了很多遍還是如此,這條查詢語句並沒有起作用。
後來查谷歌之後發現有人和我遇到同樣的問題。
解決方法很簡單:
讓specification等於and函式返回值
也就是這樣:
specification = specification.and(VehicleSpecs.belongToCommunity(district.getId()));
然後回過頭看and函式的宣告才發現:
返回的是一個Specification型別的資料。也就是說,我並沒有儲存這個資料,所以查詢失效了。
應該重新給本地變數賦值。這樣才能使查詢真正新增上去。
之後回過頭來想想,我沒有想到重新賦值的原因,可能是習慣了下圖中的方式,即呼叫了函式,就真正地把資料新增了進去,不用再去重新賦值。
總結
總結來說還是需要真正看函式的宣告,檢視它的返回值,以確定是否需要執行相關的操作。因為這個函式的用法和返回值都寫在了宣告中。
單元測試資料不一致
在單元測試中,第187行發生的錯誤。
MockMvc返回的值與期望的值不一致
但是去控制檯一看:值是相同的。期望值是0,實際值也是0。這就很奇怪了,期望值和實際值相同,為什麼兩者沒有通過判斷呢。
很容易聯絡到是型別出了問題。
測試發現,Long,Integer, String, 都通過了。 沒通過的是Short型別的資料,即紅框中的資料。
後來在後面加上 .toString()能正常通過。
這裡mvc的json型別的資料是string型別, 與short型別資料判斷的時候失敗了,可能是兩者不能正常識別。