【问题标题】:Why does my update query that works in SQL Server 2005 Management Studio not work as a Prepared Query in Java?为什么我在 SQL Server 2005 Management Studio 中工作的更新查询不能作为 Java 中的准备查询工作?
【发布时间】:2011-11-22 20:41:20
【问题描述】:

我有一个表 [Name Table] 和一个关联的表 workSchedule。我正在使用 Hibernate 3.6.7.Final 来生成我的查询。结果是:

update Personnel.dbo.[Name Table] set workSchedule=? where [Name IRC]=?

抛出异常:

11-22@10:30:41 WARN [] JDBCExceptionReporter - SQL 错误:8624,SQLState:S0001
11-22@10:30:41 错误 [] JDBCExceptionReporter - 内部查询处理器错误:查询处理器无法生成查询计划。如需更多信息,请联系客户支持服务。

[Name Table].workSchedule 是这样定义的外键:

ALTER TABLE [Name Table] ADD workSchedule VARCHAR(34) 
            FOREIGN KEY REFERENCES workSchedule(id);  

workSchedule.id 是这样定义的:

CREATE TABLE workSchedule
( /* format = letter-days-lunch EX: A-5-1 */   
  id AS CASE lunch
         WHEN 1 THEN scheduleLetter+'-'+CONVERT(VARCHAR, scheduleDays)+'-'+'1'
         ELSE scheduleLetter+'-'+CONVERT(VARCHAR, scheduleDays)+'-'+'5'
        END PERSISTED NOT NULL,
/* rest of table follows */
);

如果我将上面的更新查询复制粘贴到 SSMS 中并直接为 ?s 插入值,它就可以工作。

更新:
我刚刚尝试将表 WorkSchedule 的 PRIMARY KEY 更改为 INT IDENTITY 列。我离开重命名id 转移,否则将其作为列留在桌子上。我还更新了 POJO 和 .hbm.xml 文件。更新查询仍然失败,但有同样的异常。

【问题讨论】:

    标签: java sql-server hibernate


    【解决方案1】:

    我将此列为答案,因为这是我最终解决问题的方法。

    我完全删除了 WorkSchedule 上的计算字段。
    我将计算作为 POJO 中的吸气剂来实现。
    重新加工 workschedule 以使用 IDENTITY 进行 PK
    并将 [Name Table] 重新链接到新的 IDENTITY 字段。现在一切正常。

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多