Я столкнулся со странной проблемой при выполнении запроса 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, чтобы указать тип для использования.
Есть ли конкретная причина, по которой вы не используете пакет java.time, а вместо этого используете JodaTime?
Время Joda фактически устарело из-за java.time, поэтому полагаться на его постоянную поддержку — плохой план.
@MCEmperor У меня нет другого выбора, кроме как использовать это
Трудно сказать, исходя из того, что вы представили. Будет ли работать, если вы укажете minusDays(0), чтобы не менять дату? Может быть, это отсутствие значения карты, основанное на другом DateTime? Здесь только предположения.
@WJS, с minusDay(0) не пробовал. На карте я просто устанавливаю ту же переменную, ничего больше
@WJS, это работает. Это работает, если я вычитаю 2 месяца вместо 60 дней.
Он работает после изменения таким образом:
DateTime lookbackDays = now.minusMonths(2);
Я предполагаю, что они не позволяют вычитать более 31 дня в терминах дней. Кто такой they? Вычитание 60 дней вернуло действительный экземпляр DateTime. Что, если вы вручную установите дату на 60 дней раньше путем синтаксического анализа? Здесь может быть что-то еще.
they
-> Я имел в виду joda date time lib. Однако вычитание 60 дней дает действительную дату и время, в этом нет никаких сомнений.
Вы не должны использовать Joda-Time здесь, используйте классы java.time.