В настоящее время мы сталкиваемся с проблемой среды контроля качества программного обеспечения, которую мы написали и распространили. У меня нет доступа к их системе, поэтому единственная информация, которую я могу получить, - это какие журналы сервера я могу почерпнуть у перегруженных и перегруженных системных администраторов. По политическим причинам я должен сделать это правильно с первого раза. Все глаза на меня.
В нашей внутренней тестовой среде мы используем SQLServer версии 10.50.1600. Приложение представляет собой веб-приложение на Java, использующее Hibernate 3.5.5 + c3p0 0.9. Недавно нам пришлось добавить столбец базы данных, чтобы исправить ошибку, это в основном логический флаг, который обозначает удаление. Вот столбец, который я добавил в таблицу. Этот однострочный сценарий был частью пакета развертывания, который был доставлен клиенту.
alter table foo.bar add expired tinyint not null default 0;
Я добавил в приложение следующее отображение Hibernate:
<property name="expired" type="boolean">
<column name="expired" precision="1" scale="0" not-null="true" />
</property>
Проведено модульное тестирование, проверка кода, проверка интеграции, контроль качества принят на месте, упакован и доставлен клиенту. Клиент правильно применил обновления и предоставил скриншоты, подтверждающие это. Столбец существует. Сбой приложения со следующим исключением в журналах:
2012-03-09 14: 50: 18,374 ПРЕДУПРЕЖДЕНИЕ [org.hibernate.util.JDBCExceptionReporter] (ajp - ####) Ошибка SQL: 207, SQLState: 42S22
2012-03-09 14: 50: 18,374 SEVERE [org.hibernate.util.JDBCExceptionReporter] (ajp - ####) Недопустимое имя столбца с истекшим сроком действия.
Единственное заметное различие между этими двумя средами заключается в том, что они работают под управлением SQLServer версии 10.0.4000. Их администраторы баз данных, возможно, также сделали это другими способами, о которых они не сказали мне. Вы видите здесь связь или у вас есть какой-либо другой совет о том, в чем может быть проблема? Может ли это быть проблемой набора символов?