繁体   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