Ошибка JPA при странном сообщении

0

У меня странная проблема, когда отображение JPA не работает при преобразовании в метку времени, но значение, которое оно использует, представляет собой целую строку, а не одну переменную.

Ошибка:

java.sql.SQLException: Value '1988├╗  ├╗├╗├╗├╗├╗├╗0
07 1234567 wk├╗0├╗├╗├╗├╗├╗                                              ' can not be represented as java.sql.Timestamp

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

Рабочая среда MySQL правильно считывает всю информацию из таблицы. Запуск mysql из команды выводит все данные правильно. Ничего особенного не показывать.

Упрощенная версия моего класса сопоставления:

@Entity
@Audited
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class PersonSundry {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="person_id", unique=true)
    private Person person;

    @ManyToOne(fetch=FetchType.EAGER)
    private Lookup1 lookup1;
    @ManyToOne(fetch=FetchType.EAGER)
    private Lookup2 lookup2;

    @Lob
    private String backgroundInfo;
    private LocalDate dateOfSomething1;
    private LocalDate dateOfSomething2;
    private LocalDate dateOfSomething3;

    // getters and setters
}

Кто-нибудь сталкивался с этим раньше? Любые идеи, где еще искать?

РЕДАКТИРОВАТЬ: Основная причина оказалась типичной неудачной сдачей 00-00-0000 в метку времени, однако я собираюсь оставить вопрос открытым, чтобы узнать, знает ли кто-нибудь, где было задано странное сообщение об ошибке вместо точного,

Теги:
spring-boot
hibernate
jpa
hibernate-mapping

1 ответ

0

Вы используете MYSQL? Попробуйте использовать этот тип соединительной строки.

jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull

Datetimes с all-zero компонентами (0000-00-00...). Эти значения не могут быть надежно представлены на Java. Connector/J 3.0.x всегда преобразовывал их в NULL при чтении из ResultSet.

Connector/J 3.1 генерирует исключение по умолчанию, когда эти значения встречаются, поскольку это наиболее правильное поведение в соответствии со стандартами JDBC и SQL. Это поведение можно изменить с помощью свойства конфигурации zeroDateTimeBehavior. Допустимые значения:

исключение (по умолчанию), которое генерирует SQLException с SQLState из S1009.

convertToNull, который возвращает NULL вместо даты.

раунд, который округляет дату до ближайшего ближайшего значения, которое составляет 0001-01-01.

  • 0
    Этот дескриптор заставляет MySQL выполнять преобразования неявно. Однако я хотел бы знать, почему сообщение об ошибке неверно.
  • 0
    Datetime с полностью нулевыми компонентами (0000-00-00 ...) - эти значения не могут быть надежно представлены в Java. Connector / J 3.0.x всегда преобразовывал их в NULL при чтении из ResultSet. Connector / J 3.1 генерирует исключение по умолчанию, когда встречаются эти значения, так как это наиболее правильное поведение в соответствии со стандартами JDBC и SQL. Это поведение можно изменить с помощью свойства конфигурации zeroDateTimeBehavior.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню