網頁

2018/7/18

Java SQL Server Error 'The data types time and datetime are incompatible in the greater than or equal to operator.'

今天在用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的值儲存為datetimesmalldatetime,而我使用的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。


參考:

沒有留言:

張貼留言