事實上,這是 JDBC 發生的錯誤,不是 Hibernate。
SEVERE: Servlet.service() for servlet bisch threw exception java.sql.SQLException: Value '... 0000-00-00 ...' at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) at com.mysql.jdbc.ResultSetRow.getDateFast(ResultSetRow.java:141) at com.mysql.jdbc.BufferRow.getDateFast(BufferRow.java:707) at com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:2210) at com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:2172) at com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:2237) at com.mchange.v2.c3p0.impl.NewProxyResultSet.getDate(NewProxyResultSet.java:3212) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:104) at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) at $Proxy47.getDate(Unknown Source)因為是既有資料庫,所以不方便將 0000-00-00 改成 Null。
Google 得到的結論,這是 MySQL 特有的問題,因此 MySQL 也有專屬的解答。
只要在連線 Url 加上 zeroDateTimeBehavior=convertToNull 這個參數就好了。
<hibernate-configuration> <session-factory> <property name="connection.driver_class"> com.mysql.jdbc.Driver</property> <property name="connection.url"> <![CDATA[jdbc:mysql://localhost/legacyDB?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull]]> </property> <!-- ... --> </session-factory> </hibernate-configuration>---
---
---
沒有留言:
張貼留言