Невозможно сохранить объект, когда установлена ​​дата - PullRequest
1 голос
/ 18 октября 2019

Я использую Spring Boot с JPA и Lombok. Моя сущность Sample содержит четыре даты: утвержденную дату, дату выборки и createdAt и modifiedAt, которые поддерживаются самой JPA с классом Auditable. JPA управляет схемой, база данных работает под управлением MySQL, а все столбцы даты имеют значение DateTime. Все даты относятся к классу java.util.Date.

Пример сущности (упрощенно по причинам)

@Entity
@Data
@EqualsAndHashCode(callSuper = false)
public class Sample extends Auditable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Integer id;

    Date approved;

    @DateTimeFormat(pattern = "yyyy-MM-dd'T'H:m")
    Date sampleDate;
}

DateTimeFormat на sampleDate призван помочь Springпреобразовать данные формы в java.util.Date.

Auditable.java

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Auditable {

    @CreatedDate
    @Column(name = "created_at", updatable = false, nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdAt;

    @LastModifiedDate
    @Column(name = "modified_at")
    @Temporal(TemporalType.TIMESTAMP)
    private Date modifiedAt;
}

Когда мой контроллер выполняет это:

Sample s = sampleRepository.getOne(id);
s.setApproved(new Date());
sampleRepository.save(s);

SpringСоздает это сообщение об ошибке:

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: усечение данных: слишком длинные данные для столбца «утвержден» в строке 1

1 Ответ

0 голосов
/ 18 октября 2019

Лучше использовать LocalDateTime вместо java.util.Date или java.sql.Date, если вы делаете это с помощью java> = 8.

Контролируемые сущности createDate, lastModifiedDate должен быть установлен Jpa Auditor (framework)не клиентом (в этом контексте вы).

Кроме того, вы можете попробовать @Temporal(TemporalType.DATE) вместо TemporalType.TIMESTAMP, если хотите сохранить свой код.

Обновлено

Извините, что пропустил, какую именно тему вы затронули.

Просто попробуйте добавить @Temporal(TemporalType.DATE) выше Date approved;.

...