JPA данных пружины неправильно читает столбец отметки времени Mysql как java .time.LocalDateTime - PullRequest
0 голосов
/ 28 марта 2020

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

create table t_travel(
  travel_id           int unsigned          not null,
  bus_id              int unsigned          not null,
  source              varchar(75)           not null,
  destination         varchar(75)           not null,
  departure_datetime  timestamp             not null
);
alter table t_travel add constraint pk1_travel primary key (travel_id);
insert into t_travel(bus_id, source, destination, departure_datetime, status)
values(1, 'XXX', 'YYY', '2020-04-05 00:00:00', 'Open';

Один из методов в этом репозитории JPA использует метод проекции DTO и JPA для извлечения данных, удовлетворяющих определенному условию.

@Query("select new gro.edu.ot.dto.TravelSearchResultDto(" +
       "t.travelId, t.source, t.destination, t.departureDatetime, t.status " +
       ") from Travel t " +
       "where t.source = :source and t.destination = :destination " +
       "and departureDatetime = :fromDt")
public List<TravelSearchResultDto> getTravel(String source, String destination,
LocalDateTime fromDt);

Наконец, мой тест выглядит следующим образом. Это продолжало терпеть неудачу (assertTrue), поскольку никакая строка не была выбрана.

@Test
public void testTravelSearch(){
    List<TravelSearchResultDto> result = 
travelRepository.getTravel("XXX","YYY",LocalDateTime.of(2020,4,5,0,0));        
    result.forEach(t -> logger.info("{}", t));
    assertTrue(result.size() > 0);
}

Наконец, когда я изменил последний предикат в моем JPQL, где условие больше или равно, как показано ниже, тест начал успешно выполняться

and departureDatetime >= :fromDt

Удивлен, я обновил toString () из DTO. Похоже, что у dateDatetime другое время

TravelSearchResultDto{travelId=1, source='XXX', destination='YYY', 
departureDatetime=2020-04-05T10:00}

Я использую mysql: 8.0.19, Spring boot org.springframework.boot: 2.2.5.RELEASE

Есть кто-нибудь сталкивался с подобной проблемой или можно объяснить наблюдение?

...