#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
запросов не является хорошим вариантом для проверки упорядоченности, поскольку база данных не гарантирует упорядоченность результата.