Дата гибернации не экономит миллисекунды - PullRequest
5 голосов
/ 01 июня 2011

Я сохраняю сущность в спящем режиме с датой создания

@Id
    @Column(name = "dtcreation")
    @Type(type="timestamp")
    private Date creation;
и помещаю новую дату в это поле:
entity.setCreation(new Date());
    entityDao.persist(entity);
, но когда она сохраняется в БД, время не содержит миллисекунд, а помещаетэто 0, если я пытаюсь обновить с помощью запроса значение миллисекунд, это работает ... кто-то может мне помочь?

после метода persist у меня есть запись с 01/06/2011 15:00:00.0, но если я сделал ОБНОВЛЕНИЕ, я могу изменить миллисекунды, поэтому БД поддерживает это ... база данных - informix

Ответы [ 2 ]

9 голосов
/ 01 июня 2011

Это согласуется с задокументированным поведением java.util.Date и java.sql.Timestamp

java.util.Date сохраняет до второгои java.sql.Timestamp - это тонкая оболочка для размещения наносекундного значения значения временной метки SQL.Если вы читаете заметку на Javadoc Timestamp, в ней четко указана эта разница.

Если вы не хотите терять вторые дроби и не хотите исследовать альтернативные библиотеки дат (например, вышеупомянутое время Joda), вам нужно сделать поле java.sql.Timestamp,и используйте значение в миллисекундах текущей даты, чтобы построить начальное значение

java.util.Date date = new java.util.Date();
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
entity.setCreation(timestamp);
0 голосов
/ 01 июня 2011

Без вашего кода для тестирования мне сложно дать окончательный ответ, но, взглянув на Javadoc для java.sql.Timestamp , кажется, что вы смешиваете типы с аннотированием поля как метка времени. Измените тип java с Date на Timestamp и посмотрите, решит ли это вашу проблему.

...