記載遇到過的問題。
datetime轉換問題
Oracle - timestamp -> date
使用org.hibernate.dialect.OracleDialect會將timestamp轉為date,而date精準度不足。
Root cause為registerColumnType將timestamp設為date,
public OracleDialect() { super(); LOG.deprecatedOracleDialect(); // Oracle8 and previous define only a "DATE" type which // is used to represent all aspects of date/time registerColumnType( Types.TIMESTAMP, "date" ); registerColumnType( Types.CHAR, "char(1)" ); registerColumnType( Types.VARCHAR, 4000, "varchar2($l)" ); }
解法有二,一個是直接使用Oracle9Dialect或自己寫一個Dialect,其中registerColumnType寫為
registerColumnType( Types.TIMESTAMP, "timestamp" );
Reference
Mysql - timestamp(3) -> timestamp
Mysql從5.6開始支援秒的小數位,精準度到6位,但透過Hibernate轉換無法轉出對應的小數位宣告。
解法為Override MySql的Dialect:
public class MySQL564PlusDialect extends MySQL5Dialect { public MySQL564PlusDialect() { super(); registerColumnType( Types.TIMESTAMP, 6, "datetime($l)" ); } }
也可以等它把solution寫好8-)。
留言
張貼留言