首页 > 解决方案 > 在 ResultSet Postgres 中找不到创建的列名

问题描述

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

我在 postresql 中执行了这个查询,但收到SqlExceptionHelper - The column name created was not found in this ResultSet.Is that should be e1.createdor e2.created?但是如果是这样,我不确定为什么,有人可以解释一下这个问题的原因和解决方法吗?

这是提高可读性的查询:

UPDATE einvoice_message AS e1 
  SET message = null 
FROM (
  SELECT * 
  FROM einvoice_message 
  where created < :created 
  ORDER BY :created LIMIT :limit 
  FOR UPDATE SKIP LOCKED
) AS e2 
WHERE e1.einvoice_message_id = e2.einvoice_message_id 
RETURNING e1.einvoice_message_id

奇怪的是,我可以通过查询工具执行这个脚本,一切正常。但是日志中的错误清楚地表明:

SqlExceptionHelper - The column name created was not found in this ResultSet.

计划任务中发生意外错误。org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行查询;

SQL [UPDATE einvoice_message AS e1 SET message = null FROM (SELECT * FROM einvoice_message where created < ? 
ORDER BY ? LIMIT ? FOR UPDATE SKIP LOCKED) AS e2 WHERE e1.einvoice_message_id = e2.einvoice_message_id RETURNING e1.einvoice_message_id];

nested exception is org.hibernate.exception.SQLGrammarException: could not execute query

我的表 ddl:

create table einvoice_message
(
    einvoice_message_id bigserial not null
        constraint einvoice_message_pk
            primary key,
    message bytea not null,
    created timestamp default now() not null
);

标签: javapostgresqlspring-bootspring-data-jpa

解决方案


推荐阅读