目前,我們編寫和分發的軟件的客戶QA環境存在問題。我沒有權限訪問他們的系統,所以我能得到的唯一信息是我能從他們過度勞累和超負荷的系統管理員身上收集哪些服務器日誌。出於政治原因,我必須在第一時間做到這一點。所有的目光都在我身上。SQLServer環境問題,SQLError 207無效的列名稱sqlstate 42s22
在我們的內部測試環境中,我們運行SQLServer版本10.50.1600。該應用程序是一個使用Hibernate 3.5.5 + c3p0 0.9的Java Web應用程序。我們最近不得不添加一個數據庫列來修復一個bug,它基本上是一個表示刪除的布爾標誌。這是我添加到表格中的列。這個單行腳本是交付給客戶端的部署包的一部分。
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>
單元測試,代碼審查,測試,集成,QA接受內部,打包和交付給客戶。客戶端正確應用了更新並提供了證明此類功能的截圖。該列存在。應用程序失敗,並在日誌中的以下異常:
2012-03-09 14:50:18,374 WARNING [org.hibernate.util.JDBCExceptionReporter] (ajp-####) SQL Error: 207, SQLState: 42S22 2012-03-09 14:50:18,374 SEVERE [org.hibernate.util.JDBCExceptionReporter] (ajp-####) Invalid column name 'expired'.
兩個環境之間的唯一明顯的差別是,他們正在運行SQLServer的版本10.0.4000。他們的數據庫管理員也可能以他們沒有告訴我的其他方式修改它。你在這裏看到了一個連接,或者對這個問題可能有什麼其他建議嗎?這可能是一個字符集問題嗎?
你錯過了** hibernate.query.substitutions = true 1,false 0 **在映射。 – ManuPK 2012-03-12 16:18:05