Joda-Time DateTime.minusDays() Ошибка в запросе jdbc

Я столкнулся со странной проблемой при выполнении запроса jdbc и передаче времени даты joda в параметре.

DateTime now = DateTime.now();
DateTime lookbackDays = now.minusDays(60);

Определение столбца:

  @CreatedDate
    @NotNull
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    @Column(name = "created_date", nullable = false, updatable = false)
    @ColumnDefault("now()")
    protected DateTime createdDate = DateTime.now();

При передаче now в качестве параметра (передача внутри карты и именование в порядке, согласующемся с запросом в обоих случаях), мой запрос jdbc работает нормально, но для lookbackDays он дает исключение, как показано ниже:

вложенным исключением является org.postgresql.util.PSQLException: невозможно определить тип SQL для использования для экземпляра org.joda.time.DateTime. Используйте setObject() с явным значением Types, чтобы указать тип для использования.

Вы не должны использовать Joda-Time здесь, используйте классы java.time.

Mark Rotteveel 16.02.2023 13:44

Есть ли конкретная причина, по которой вы не используете пакет java.time, а вместо этого используете JodaTime?

MC Emperor 16.02.2023 13:45

Время Joda фактически устарело из-за java.time, поэтому полагаться на его постоянную поддержку — плохой план.

g00se 16.02.2023 13:58

@MCEmperor У меня нет другого выбора, кроме как использовать это

user404 16.02.2023 14:32

Трудно сказать, исходя из того, что вы представили. Будет ли работать, если вы укажете minusDays(0), чтобы не менять дату? Может быть, это отсутствие значения карты, основанное на другом DateTime? Здесь только предположения.

WJS 16.02.2023 15:07

@WJS, с minusDay(0) не пробовал. На карте я просто устанавливаю ту же переменную, ничего больше

user404 16.02.2023 15:12

@WJS, это работает. Это работает, если я вычитаю 2 месяца вместо 60 дней.

user404 16.02.2023 16:34
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
1
7
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он работает после изменения таким образом:

DateTime lookbackDays = now.minusMonths(2);

Я предполагаю, что они не позволяют вычитать более 31 дня в терминах дней. Кто такой they? Вычитание 60 дней вернуло действительный экземпляр DateTime. Что, если вы вручную установите дату на 60 дней раньше путем синтаксического анализа? Здесь может быть что-то еще.

WJS 16.02.2023 17:11
they -> Я имел в виду joda date time lib. Однако вычитание 60 дней дает действительную дату и время, в этом нет никаких сомнений.
user404 16.02.2023 19:09

Другие вопросы по теме