У меня есть подпружиненный проект, в котором мне нужно сохранить время последнего изменения сущностей с точностью до микросекунд - фактически, свойство аудита, где хранится версия сущности. В моей среде разработки я использую базу данных MySQL, а временные типы MySQL поддерживают дроби до 6 цифр. Поэтому я могу определить соответствующий столбец с помощью timestamp(6)
или datetime(6)
при создании схемы вручную.
Но я хочу, чтобы схема генерировалась автоматически с помощью свойства spring.jpa.hibernate.ddl-auto=update
. Я знаю, что это не очень хорошая практика в производственной среде, но этот проект будет шаблоном или семенем для многих других проектов. Поэтому мне нужно сохранить его в общем виде, чтобы он не зависел от системы баз данных с подчеркиванием.
Для MySQL я могу заставить его работать, используя columnDefinition
аргумент @Column
аннотации, как показано ниже.
@Version
@Column(columnDefinition= "datetime(6)")
Timestamp version;
Но это не будет работать в других базах данных, где datetime(6)
не является допустимым временным типом.
Я попытался автоматически сгенерировать аргумент конкретной настройки схемы базы данных scale
(@Column(scale= 6)
), но он просто игнорирует дробную часть, генерирует столбец типа datetime
, а не datetime(6)
.
Мне любопытно, есть ли способ сделать это, хотя я не знаю.
Ребята, можете ли вы дать мне какую-то информацию по этому вопросу?
Обновление
@ crizzis в своем комментарии научил меня, что речь идет об использовании правильного hibernate.dialect . Итак, с org.hibernate.dialect.MySQL57Dialect я смог автоматически сгенерировать datetime (6) столбцов. Затем я попытался проконтролировать количество цифр в дробной части с аргументом scale
, но безуспешно, оно всегда имеет 6 цифр.
Теперь я хотел бы знать, возможно ли это без использования аргумента columnDefinition
внутри @Column
аннотации.