2012-03-12 514 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