2012-03-12 510 views
1

目前,我們編寫和分發的軟件的客戶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。他們的數據庫管理員也可能以他們沒有告訴我的其他方式修改它。你在這裏看到了一個連接,或者對這個問題可能有什麼其他建議嗎?這可能是一個字符集問題嗎?

+1

你錯過了** hibernate.query.substitutions = true 1,false 0 **在映射。 – ManuPK 2012-03-12 16:18:05

回答

3

我想出了問題所在。

當我在這個問題中說這個時,這是明顯不真實的。

The column exists.

該列在該環境中不存在。 DBA正在給我提供有關錯誤環境的信息。

以此爲教訓的人。不要構建Web應用程序來分發給客戶端,以便他們在自己的服務器上託管。如果您可以提供幫助,請在您自己的服務器上託管您自己的Web應用程序,以便完全控制它。 :)

+0

通過您的評論可以加強雲託管服務的範式轉變 – Cshah 2014-08-07 10:55:26