У меня очень глупая проблема в моих тестах. Я использую @DataJpaTest
для запуска ряда простых тестов в простом хранилище. У меня есть объект с именем Event
и интерфейс хранилища, который всегда должен возвращать последнюю запись.
Однако, независимо от того, что я делаю, я получаю первую запись.
@Entity
@Cacheable(false)
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(optional = false)
private Observed observed;
private LocalDateTime creationDate;
//Constructor that sets the observer and timestamp
//getters and setters
}
Какой Я запрашиваю через JPA:
public interface EventRepository extends JpaRepository<Event, Long> {
Event findFirstById_OrderByCreationDate_Desc(@Nonnull Long id);
}
Теперь я ожидаю, что этот код сделает следующее. Упорядочите события по дате их создания, которая содержит метку времени с точностью до миллисекунды, поместив последнюю на вершину, а затем верните только последнюю в качестве результата для события. Это, кажется, работает в реальном приложении. Но в тестах происходит следующее:
@Test
public void createAndFindLastEvent() {
Event event1 = new Event(observer);
eventRepository.save(event1);
Event event2 = new Event(observer);
eventRepository.save(event2);
Event event3 = eventRepository.findFirstById_OrderByCreationDate_Desc(observer.getId());
}
В результате event3
содержит значения event1
, хотя event2
имеет более позднюю метку времени. Это сводит меня с ума. Я попытался использовать saveAndFlush()
при сохранении, flush()
непосредственно в репозитории, и я поместил @Cacheable(false)
в сам класс сущности, чтобы не происходило странных вещей. Я что-то пропустил? Разве это не должно работать так, как я ожидаю?
Самое странное в этом то, что findAll()
возвращает оба события и что порядок AS C или DES C, похоже, ничего не меняет.