2013-07-26 4 views
2

Я создаю таблицу, использующую Hibernate для базы данных MySQL в Java.Hibernate Annotation for TemporalType.TIMESTAMP Precision

Один из столбцов типа Date.

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

Я знаю, что можно указать точность TIMESAMP в MySQL с помощью

TIMESTAMP(6) 

Однако, как вы это делаете, что в отображении аннотаций Hibernate? Я попытался

length = 19, precision = 38, scale = 20 

ни один из которых, кажется, чтобы сохранить время в миллисекундах, прошедшее второй ака

1374839856000 

в отличие от

1374839855789 

Кто-нибудь знает решение этой проблемы? Спасибо за помощь!

+0

Я думаю, вы должны изменить тип столбца DateTime. – 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

Смежные вопросы