我有一个相当普通的 Oracle 表,有七行。每行都有不同的值,有一个唯一的键可以防止大多数列具有相似的数据。
在 Grails 控制器中,我正在运行以下代码:
else if (request.method == "GET" && params.term) {
def a = WaiverExemption.findAll("from WaiverExemption as e where e.exemptionTermCode.id = ?", [parseLong(params.term)]) as JSON
a.render(response)
return false
}
浏览器对此提出了正确的请求。它传入一个有效术语,在 IntelliJ 调试器中我可以看到该术语是正确的。直到上周的某个时候,这段特殊的代码片段才能正常工作……我的麻烦与让 Backbone 和 jQuery 使用返回的 json 数据有关。
现在,它不是返回我期望的 7 行数据,而是返回同一行 7 次。这一行恰好是 Oracle 客户端中返回的第一行(尽管由于我没有使用任何 order by,从技术上讲,它根本不是第一行......不能保证订单等等)。
到目前为止,我已经完成了多个“grails clean”。我当然已经多次停止并重新启动应用程序,并且我在调试和常规执行中都尝试过。
此代码的唯一更改是在域类中添加了另一列。但时间与事情开始搞砸的时间并不相符。新列实际上是 Oracle 的 ROWID,我没想到它会起作用,但确实使另一个问题更容易解决。但是,删除它并不能恢复它的工作。
谁能解释这种行为?
[编辑] 按要求修复 config.groovy 后的调试结果:
2012-09-17 10:26:02,675 [http-bio-8080-exec-7] DEBUG hibernate.SQL - select waiverexem0_.EXEMPTION_TERM_CODE as EXEMPTION1_26_, waiverexem0_.exemption_activity_date as exemption2_26_, waiverexem0_.exemption_classification as exemption3_26_, waiverexem0_.exemption_code as exemption4_26_, waiverexem0_.exemption_pay_type as exemption5_26_, waiverexem0_.exemption_priority as exemption6_26_, waiverexem0_.ROWID as ROWID7_26_, waiverexem0_.exemption_term_code as exemption1_26_, waiverexem0_.exemption_user_id as exemption8_26_ from TT_ST_GRADUATE_EXEMPTION waiverexem0_ where waiverexem0_.exemption_term_code=?