sqlexceptionhelper-列名在此结果集中找不到

jmo0nnb3  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(455)

以下是查询:

  1. UPDATE einvoice_message AS e1
  2. SET message = null
  3. FROM (
  4. SELECT *
  5. FROM einvoice_message
  6. where created < :created
  7. ORDER BY :created LIMIT :limit
  8. FOR UPDATE SKIP LOCKED
  9. ) AS e2
  10. WHERE e1.einvoice_message_id = e2.einvoice_message_id
  11. RETURNING e1.einvoice_message_id

我要走了 SqlExceptionHelper - The column name created was not found in this ResultSet. 不明白为什么在哪里?我需要帮助。
java代码:

  1. @Query(value = "UPDATE einvoice_message AS e1 SET message = null FROM (SELECT * FROM einvoice_message
  2. where created < :created ORDER BY :created LIMIT :limit FOR UPDATE SKIP LOCKED) AS e2 WHERE
  3. e1.einvoice_message_id = e2.einvoice_message_id RETURNING e1.einvoice_message_id", nativeQuery = true)
  4. List<EinvoiceMessage> deleteEinvoiceMessageContent(@Param("created") OffsetDateTime created,
  5. @Param("limit") int limit);

这是我的ddl表:

  1. create table einvoice_message
  2. (
  3. einvoice_message_id bigserial not null
  4. constraint einvoice_message_pk
  5. primary key,
  6. message bytea not null,
  7. created timestamp default now() not null
  8. );

改变 :created 变量到列 created 没有解决问题。

7gcisfzg

7gcisfzg1#

问题在于它的返回值。 RETURNING e1.einvoice_message_id 将返回一个数字,而不是我刚才提到的列表。正确答案是:

  1. @Query(value = "UPDATE einvoice_message AS e1 SET message = null FROM (SELECT * FROM einvoice_message
  2. where created < :created ORDER BY :created LIMIT :limit FOR UPDATE SKIP LOCKED) AS e2 WHERE
  3. e1.einvoice_message_id = e2.einvoice_message_id RETURNING e1.einvoice_message_id", nativeQuery = true)
  4. int deleteEinvoiceMessageContent(@Param("created") OffsetDateTime created,
  5. @Param("limit") int limit);

相关问题