簡體   English   中英

休眠時間戳 - 毫秒精度

[英]Hibernate timestamp - millisecond precision

似乎存儲時間戳以毫秒精度是hibernate的一個已知問題。 我在db中的字段最初被設置為timestamp(3),但我也嘗試了datetime(3)......不幸的是,它沒有任何區別。

我嘗試過使用Timestamp和Date類,最近我開始使用joda-time庫。 經過所有這些努力,我仍然無法以毫秒精度保存時間戳。

我的類映射包含以下屬性:

<property name="startTime" column="startTime"    type="org.jadira.usertype.dateandtime.joda.PersistentDateTime" length="3" precision="3" />

我是自定義Dialect類

public class MySQLQustomDialect extends MySQL5InnoDBDialect{
    protected void registerColumnType(int code, String name) {
        if (code == Types.TIMESTAMP) {
            super.registerColumnType(code, "TIMESTAMP(3)");
        } else {
            super.registerColumnType(code, name);
        }
    }
}

如果我手動將數據輸入db,hibernate會設法檢索第二部分。

有什么方法可以解決這個問題嗎?

您是否有機會在MariaDB 5.5中使用MySQL Connector / J JDBC驅動程序?

Connector / J通常僅在檢測到服務器足夠新時才將毫秒部分發送到服務器,並且此檢測檢查服務器版本是否> = 5.6.4。 這顯然不適用於MariaDB 5.5.x.

您可以在此處查看Connector / J源的相關部分:

http://bazaar.launchpad.net/~mysql/connectorj/5.1/view/head:/src/com/mysql/jdbc/PreparedStatement.java#L796

使用MariaDB自己的JDBC驅動程序(MariaDB Java Client)可能有所幫助(我還沒有嘗試過),但我偶然發現將useServerPrepStmts = true添加到連接字符串使得這也適用於Connector / J.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM