Усечение данных: неверное значение даты и времени: org.joda.time.DateTime - PullRequest
0 голосов
/ 10 января 2019

Я получаю исключение SQL при передаче DateTime в мой запрос вставки через Hibernate.

Пожалуйста, найдите мой код Java, где я пытаюсь передать DateTime:

claimGroupingHistory.setCreatedAt(new DateTime());
claimGroupMappingRepository.insertClaimGroupingHistory(claimGroupingHistory.getDealerCode(),
        claimGroupingHistory.getCreatedAt(),
        claimGroupingHistory.getCreatedBy());

Я получаю DateTime в формате, когда я sysout: 2019-01-10T13:59:36.700+05:30.

Пожалуйста, найдите мой запрос вставки

Пожалуйста, найдите мое исключение, я получаю

2019-01-10 13:59:36,754 [http-9292-1] ERROR   org.hibernate.engine.jdbc.spi.SqlExceptionHelper: 146 - Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x16org.joda.time.DateTime\xB8<xdj[\xDD\xF9\x02\x00\x00xr\x00\x1Forg.joda.time.base.BaseDateTime\xFF\xFF\x' for column 'created_at' at row 1
2019-01-10 13:59:36,774 [http-9292-1] ERROR         com.cat.pscs.api.controller.BaseController:  57 - Data Integrity Violation Exception : org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Чтобы помочь hibernate сохранить DateTime в базе данных, вы должны использовать joda-time-hibernate вместо joda-time в проекте.

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time-hibernate</artifactId>
    <version>1.4</version>
</dependency>

Измените вашу сущность:

@Column
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime createdAt;

Обратите внимание, что версия 1.4 предназначена для Hibernate 3.6. Поэтому обновляйте joda-time-hibernate, когда вы используете спящий режим более высокого уровня.

Альтернативы:

Объявите дополнительную зависимость в pom.xml, она может поддерживать постоянство для joda-time.

<dependency>
    <groupId>org.jadira.usertype</groupId>
    <artifactId>usertype.extended</artifactId>
    <version>5.0.0.GA</version>
</dependency>

Изменить сущность:

@Column
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private DateTime createdAt;
0 голосов
/ 10 января 2019

Вы должны использовать следующую аннотацию в своем классе сущности, чтобы сохранить joda DateTime:

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime createdAt;

Также убедитесь, что у вас есть jadira-usertype-core.jar в вашем classpath:

<dependency>
    <groupId>org.jadira.usertype</groupId>
    <artifactId>usertype.core</artifactId>
    <version>3.1.0.CR1</version>
</dependency>
...