Собственный запрос JPA с оператором IN - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь использовать nativeQuery в Springboot JPA

Query(value = "select * from sms.outgoing_message where create_ts between timestamp(?1) and timestamp(?2) and (error_code IN (?3) or (error_code = '0' and error_msg not like '%Opt out%') or (error_code = '1' and (error_msg like '%21211%' or error_msg like '%21612%' or error_msg = 'Mobile number format is wrong')))", nativeQuery = true)
  List<OutgoingMessage> getBounceBackPhoneNumbers(LocalDateTime from, LocalDateTime to, List<String> listSoftBounceErrorCodes);

Приведенный выше запрос возвращает пустой результат.

, когда я пытаюсь использовать коды ошибок, такие как 30008,30005,30007,30003,30006 вместо? 3 это дает мне больше результатов

Есть идеи, в чем может быть проблема?

1 Ответ

0 голосов
/ 23 октября 2019

Если вы используете LocalDate или LocalDateTime с JPA, вам нужно определить сопоставление для java.sql.Date или java.sql.Timestamp.

В вашем случае преобразование междуLocalDateTime и java.sql.Timestamp выполняются с помощью методов преобразования Timestamp.

import java.time.LocalDateTime;
import java.sql.Timestamp;

@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> {

    @Override
    public Timestamp convertToDatabaseColumn(LocalDateTime locDateTime) {
        return locDateTime == null ? null : Timestamp.valueOf(locDateTime);
    }

    @Override
    public LocalDateTime convertToEntityAttribute(Timestamp sqlTimestamp) {
        return sqlTimestamp == null ? null : sqlTimestamp.toLocalDateTime();
    }
}

ссылка: persist-localdate-localdatetime-jpa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...