今天在用JPA JPQL查詢SQL Server的資料表時,出現下面錯誤
The data types time and datetime are incompatible in the greater than or equal to operator
問題出在查詢條件中對應資料表time欄位的Entity參數型態為java.sql.Time,因SQL Server 2008及先前的版本不支援time型別,所以傳入SQL Server時會將java.sql.Time的值儲存為datetime或smalldatetime,而我使用的SQL Server版本為2012版是支援time型別,所以導致將datetime參數作為time欄位的查詢條件而引發以上錯誤。
解決辦法是在連接資料庫的url設定後加上參數sendTimeAsDatetime=false,例如
<property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;databaseName=MY_DB;sendTimeAsDateTime=false"/>
如此java.sql.Time就不會被轉成datetime,而是直接以time型態傳遞。
我使用的mssql jdbc driver是6.1.0版,sendTimeAsDatetime預設仍為true。
參考:
沒有留言:
張貼留言