今天在用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。
參考:
沒有留言:
張貼留言