Собственный запрос JPA не работает при вызове в производственном процессе - PullRequest
0 голосов
/ 27 марта 2019

Я пишу школьный проект, где люди могут купить билеты в кино. Я хочу иметь возможность отправлять пользователям бесплатные билеты в кино на определенные случаи, которые действительны только в течение определенного дня. В полночь я запускаю задание CRON, в результате которого билеты становятся неактивными, если срок их действия истек, поэтому их больше нельзя использовать. У меня странное поведение с запросом деактивации, и я не понимаю, почему.

У меня есть этот JPA Repository:

public interface UserTicketRepo extends JpaRepository<UserTicket, Long> { 
@Query(value = "update UserTicket ut\n" +
        "set isvalid = 0\n" +
        "where id in (\n" +
        "  select ticketId\n" +
        "  from (\n" +
        "         select ut.id as ticketId\n" +
        "         from UserTicket ut\n" +
        "                inner join TicketPrice tp on ut.ticketPrice_id = tp.id\n" +
        "                inner join PurchaseItem pi on ut.purchaseItemId = pi.id\n" +
        "                inner join Purchase p on pi.purchaseId = p.id\n" +
        "         where ut.isvalid = 1\n" +
        "           and tp.id = '" + TicketPrice.FREE_TICKET_ID + "'\n" +
        "           and TIMESTAMPDIFF(SECOND, NOW(), DATE_ADD(p.added, INTERVAL ut.activationPeriod SECOND)) < 0) as t\n" +
        ");", nativeQuery = true)
@Modifying(clearAutomatically = true, flushAutomatically = true)
@Transactional
void deactivateAllUserTicketsThatAreOverTheValidityEnd();
}

Когда я выполняю этот точный запрос вручную в инструменте БД, все мои данные обновляются корректно, но когда я запускаю запрос с использованием метода, описанного в приведенном выше коде, он не обновляет пользовательские билеты, срок действия которых истек вчера, по неизвестной причине.

Edit: После еще одного исследования я нашел этот пост: JPQL Query и Native Query, возвращающие разные результаты в spring-data-jpa Похоже, что в нативных запросах с датами происходит какая-то странность. Может быть, это причина, почему у меня проблемы. Я буду держать вас в курсе, если узнаю больше.

...