TemporalType.TIMESTAMP精度的Hibernate注释

时间:2013-07-26 05:10:33

标签: java mysql database hibernate hibernate-annotations

我正在使用Java中的Hibernate for MySQL数据库创建一个表。

其中一列是日期类型。

@Temporal( TemporalType.TIMESTAMP )
@Column( name = "event_start_time", nullable = false, length = 19 )
public Date getEventStartTime()
{
    return eventStartTime;
}

我知道可以使用

在MySQL中指定TIMESAMP的精度
TIMESTAMP(6)

但是,你如何在Hibernate注释映射中做到这一点?我试过了

length = 19, precision = 38, scale = 20

其中任何一个似乎都没有将时间存储在第二个又名的

之后的毫秒数内
1374839856000

而不是

1374839855789

任何人都知道解决方案吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

在属性hibernate.dialect中对您配置的类进行子类化,然后在那里更改使用的数据类型。将属性hibernate.dialect设置为新类。

这对我有用(自MySQL 5.6.4起):

public class MySQL564InnoDBDialect extends MySQL5InnoDBDialect {

    protected void registerColumnType(int code, String name) {
        if (code == Types.TIMESTAMP) {
            super.registerColumnType(code, "TIMESTAMP(6)");
        } else {
            super.registerColumnType(code, name);
        }
    }
}