Spring JPA: @OrderBy не работает при использовании saveAndFlush

#java #spring #hibernate #spring-data-jpa #hibernate-mapping

#java #spring #переход в спящий режим #spring-data-jpa #отображение в спящий режим

Вопрос:

Я использую @OrderBy предложение в моем компоненте, это отлично работает, когда я получаю этот объект из уровня сохранения, но когда я пытаюсь сохранить эти данные с помощью

 persistedObject = saveAndFlush(MyCustomObject);
  

Результаты в persistedObject не отсортированы, как указано в @OrderBy предложении.

Фрагмент кода :

 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "COLLECTION_ID")
@OrderBy("order ASC")
private Set<MySections> sections;
  
 class MySections {
  // Some Properties
    @Column(name = "SEQ_NO")
    private Integer order;
}
  

Код, связанный с репозиторием

 // this brings sections ordered by order property
collectionRepository.findById("123"); 


// Sections in persistedCollection are not ordered
persistedCollection = collectionRepository.saveAndFlush(collection); 

  

Ответ №1:

Это потому, что @OrderBy не материализует порядок непосредственно в базе данных. Он извлекает данные и выполняет сортировку в памяти. Для достижения того, что вы описали, вам пришлось бы использовать @OrderColumn . Он поддерживает постоянный порядок строк в базе данных.

Еще один совет — использование только select запросов не является хорошим вариантом для проверки упорядоченности, поскольку база данных не гарантирует упорядоченность результата.