Grails .findAll()多次返回相同的数据库行,这可能导致什么?

时间:2012-09-17 13:46:10

标签: oracle rest grails groovy hql

我有一个相当平凡的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客户端返回的第一行(虽然因为我没有使用任何订单,从技术上讲,它根本不是第一行......不保证订单和所有这些)。

到目前为止,我已经完成了多个“grails clean”。我当然已多次停止并重新启动应用程序,并且我已经在调试和常规执行中尝试了这一点。

此代码的唯一更改是在域类中添加了另一列。但是时间与这个开始搞砸时并不相符。新专栏实际上是Oracle的ROWID,我没想到会这样做,但确实让另一个问题更容易解决。但是,删除它并不会使其恢复正常工作。

任何人都可以解释这种行为吗?

[edit]根据要求修复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=?

1 个答案:

答案 0 :(得分:2)

之前我没有看到这个特定的问题,但是我遇到它我会像这样调试它:

  • 打开Hibernate SQL调试,这样我就可以看到Grails在Oracle上抛出的SQL。在Config.groovy log4j配置中,将“org.hibernate.SQL”添加到调试部分。然后将此API从IntelliJ控制台复制粘贴到Oracle连接的SQL客户端,并查看它返回的结果。
  • 在控制器中运行查询之前,请执行println params.term
  • 在呈现响应之前打印findAll的结果。