Код: Выделить всё
Timestamp(9)"По умолчанию" означает прикрепление @Column(columnDefinition = "TIMESTAMP(9)") к каждому свойству LocalDateTime не может быть решением.
В Hibernate5 решение заключалось в создании собственного диалекта и вызове RegisterColumnType(Types.TIMESTAMP, "timestamp(9)") в его конструктор.
Однако я не нашел решения для Hibernate6. Я попытался создать собственный диалект и переопределитьsolveSqlTypeLength.
Код: Выделить всё
public class CustomH2Dialect extends H2Dialect {
/* The Hibernate 5 Solution was to call registerColumnType(Types.TIMESTAMP, "timestamp(9)"); in the ctor.*/
@Override
public int resolveSqlTypeLength(String columnTypeName, int jdbcTypeCode, int precision, int scale,
int displaySize) {
if (jdbcTypeCode == Types.TIMESTAMP) {
return 9;
}
return super.resolveSqlTypeLength(columnTypeName, jdbcTypeCode, precision, scale, displaySize);
}
}
Есть ли у кого-нибудь идеи: как настроить TIMESTAMP(9) для всех временных меток (
Код: Выделить всё
LocalDateTimeСправочная информация: сценарии использования — Spring Tests. Запускаю Spring и память H2 для теста. И у меня есть много тестов, которые содержат такие тесты:
Код: Выделить всё
MyEntity myEntity = new MyEntity ();
myEntity.timestamp = LocalDateTime.now();
myEntity.xzy = ....
entityManager.persist(myEntity);
entityManager.flush();
entityManager.clear();
MyEntity reloaded = entityManager.find(MyEntity .class, myEntity.getId());
assertThat(reloaded.timestamp).isEqualsTo(myEntity.timestamp)
//otherFieldsTo
И поскольку это всего лишь «проблема» в тестах, я не могу добавить @Column(columnDefinition = "TIMESTAMP(9)"), потому что это также изменит поведение производства.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -precision
Мобильная версия