2013-07-26 55 views
2

我正在Java中爲MySQL數據庫創建一個使用Hibernate的表。TemporalType.TIMESTAMP的休眠註釋精度

其中一列是日期類型。

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

我知道,它可能使用

TIMESTAMP(6) 

指定TIMESAMP的在MySQL的精度但是,你怎麼做,在休眠的註釋映射?我試過

length = 19, precision = 38, scale = 20 

其中沒有一個似乎時間存儲在毫秒過去的第二又名

1374839856000 

,而不是

1374839855789 

任何人都知道一個解決的辦法?謝謝您的幫助!

+0

我覺得你有你的列類型更改爲日期時間。 – Veera

+0

我不相信有一個TemporalType.DATETIME,在Hibernate中只有DATE或TIME。 – Luke

+0

這裏有點混亂,'1374839856000'需要你,但你得到'1374839855789'。對?或其他東西... –

回答

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); 
     } 
    } 
} 
+0

真的沒有其他解決方案嗎?這看起來更像是一些解決方法。爲什麼這麼難?時間戳精度在我看來似乎是常見的事情 – Miroslav