Миграция Oracle в SQL Server — Определение столбца гибернации

#java #sql-server #hibernate #persistence #hibernate-mapping

Вопрос:

Я переношу схему базы данных Oracle на SQL Server и не уверен в определении столбца Hibernate.

Для миграции мы использовали Microsoft SQL Server Migration Assistant для Oracle, который также основывался на сопоставлении типов данных https://docs.microsoft.com/en-us/sql/relational-databases/replication/non-sql/data-type-mapping-for-oracle-publishers?view=sql-server-ver15 похоже, проделал хорошую работу. Например NUMBER(8,0) , был переведен на NUMERIC(8,0) и DATE на DATETIME ,

Поскольку мы используем последнюю версию SQL Server, я использую в своем постоянстве следующий диалект org.hibernate.dialect.SQLServer2012Dialect

Проблема теперь в том, что проверка схемы Hibernate включена Numeric и Date значения дают мне следующие ошибки:

  • найдено [числовое (типы#ЧИСЛОВОЕ)], но ожидается [bigint (Типы#БОЛЬШОЕ значение)] для числовых столбцов, определенных в режиме гибернации, как долго
  • и нашел [дата и время (типы#МЕТКА ВРЕМЕНИ)], но ожидал [дата (типы#ДАТА)] для столбцов ДАТЫ и времени, определенных в режиме гибернации как Дата
  • Та же проблема относится и к логическим значениям, которые представлены на SQL Server как ЧИСЛОВЫЕ(1,0), и я также должен задать определение столбца для этих полей.

Как решения, которые я нашел:

  1. Изменение типа данных базы данных с NUMERIC на INT или BIGINT в зависимости от случая. Однако это означает, что я буду использовать другой тип данных в базе данных по сравнению с тем, который уже предложен в документации Microsoft (приведенной выше).
  2. Добавьте в мою сущность определение столбца = NUMERIC(x1,x2) . Это решение, оно действительно работает и должно быть применено к нескольким столбцам, мне оно кажется обходным путем.
  3. Изменение типа данных в сущности hibernate. Этого я хочу избежать, так как это приведет к многочисленным изменениям в моем коде.

Существует ли какой-либо лучший или глобальный подход для этих случаев вместо того, чтобы переходить к каждой сущности hibernate и определять там столбец в аннотации @Column?

Комментарии:

1. Для ваших DATE полей Oracle, которые являются просто датой без времени, будет использоваться соответствующий тип MSSQL date . Для ваших полей, у которых также есть время, тип MSSQL будет либо datetime2 или datetimeoffset . Рекомендуется избегать использования старого datetime типа в MSSQL. Я не думаю, что смогу помочь с остальным, так как мой опыт работы с обеими этими базами данных ограничен.