Спящий режим: в SQL Server 2008 столбец был изменен с datetime на datetime2.Как я могу обновить конфигурацию Hibernate, чтобы отразить это? - PullRequest
1 голос
/ 14 ноября 2011

У меня есть приложение, в котором я создал сопоставления сущностей в Hibernate, поэтому я мог иметь доступ к некоторым устаревшим таблицам на SQL Server 2005. Все работало нормально и, как и ожидалось, до тех пор, пока база данных не была переведена на более новую версию SQL Server - в частности, для SQL Server 2008.

При перемещении данных все столбцы даты и времени в таблицах были изменены на datetime2, и теперь при запуске веб-приложения на tomcat я получаю сообщение об ошибке:

Caused by: org.hibernate.HibernateException: Wrong column type (...)
Found: datetime2, expected: datetime

Как правильно изменить конфигурацию в спящем режиме, чтобы отразить это изменение? Все сущности определяются с помощью аннотаций везде, где это возможно, все для конкретной базы данных c

Не знаю, насколько это актуально, но вот версии программного обеспечения, которые я использую:

  • Hibernate 3.6.4.Final
  • jTDS драйвер 1.2.5

Большое спасибо.

Редактировать: решение найдено

Благодаря предложениям ManuPK я перешел с jTDS на драйвер Microsoft, к сожалению, после обновления настроек веб-приложения я все еще получал ту же ошибку. Я решил это, создав собственный класс, который расширяет SQLServer2008Dialect и регистрирует datetime2 как новый тип столбца. Я не знаю, правильное ли это решение, но оно работает.

public class UpdatedSQLServerDialect extends SQLServer2008Dialect {

   public UpdatedSQLServerDialect () {
      super();
      registerColumnType(Types.DATE, "datetime2");
   }
}

1 Ответ

2 голосов
/ 15 ноября 2011

Как вы сказали, в MS SQL Server 2008 datetime устарело, и они добавили новый тип datetime2. Вы можете продолжить использовать объект java.lang.Date для отображения этого столбца в компоненте.

У вас, похоже, проблема в SQL Driver (jTDS driver 1.2.5), который вы используете. Получить новую версию jar с здесь . Я могу использовать тип данных datetime2 с этим Jar.

...