#java #postgresql #spring-boot #spring-data-jpa
#java #postgresql #spring-boot #spring-data-jpa
Вопрос:
@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.
, это должно быть e1.created
или 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.
Произошла непредвиденная ошибка в scheduled task. 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
);
Комментарии:
1. Пожалуйста, поделитесь своим таблицей ddl.
2. @FrankieDrake добавил к моему вопросу
Ответ №1:
Ваш порядок по слегка неверен
ORDER BY :created
Для заказа по требуется имя столбца, а не значение. У вас должно быть
ORDER BY created