Какой метод больше подходит для базовой и скорости сортировки? - PullRequest
0 голосов
/ 03 июня 2018

У меня есть список

@OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy("date ASC")
private List<MovieReleaseDateEntity> releaseDates = new ArrayList<>();

сущностей при загрузке, отсортированных по дате.

Однако, как вы знаете, List не самые подходящие для JPA, и этоРекомендуется использовать Set.Вот почему у меня другая идея

@OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private SortedSet<MovieReleaseDateEntity> releaseDates = new TreeSet<>();

и реализует Comparable

public int compareTo(MovieReleaseDateEntity o) {
    return this.date.compareTo(o.date);
}

Какой способ лучше?Первый с List или второй с Set?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

База данных предназначена для выполнения команды order by оптимизированным способом, в то время как столбец, используемый в order by, проиндексирован.
Так что вы должны предпочесть упорядочение базой данных, если вы можете настроить ограничения индекса на вашемстолы.

Однако, как вы знаете, Список не является наиболее подходящим для JPA, и рекомендуется использовать Set.

Я бы скорее сказал, что вы не можете злоупотреблять отображением List в сущности, так как число приемлемых ограничено по причинам здравого смысла (кардинальности).

Вы также можете видеть вещи проще: если у вас мало элементов, я предполагаю, что использование Set, вероятно, является приемлемым способом с точки зрения производительности.
В противном случае использование List с order by выполненный базой данных, вероятно, следует отдать предпочтение.

В любом случае, используйте структуру (List или Set), которая кажется наиболее подходящей для вашего варианта использования, а затем измерьте фактическую производительность, прежде чем менять свой дизайн, чтобы надеяться на более высокую производительность.

0 голосов
/ 03 июня 2018

Первый подход (@OrderBy("date ASC")) отсортирован на уровне базы данных, а второй - в памяти с реализацией Java.Если возвращаемый список достаточно большой по размеру, лучше использовать первый подход.

Если возвращаемая коллекция довольно мала и вам нужна сложная логика сортировки (но это не ваш случай с сортировкой по определенному полю), сортировка сSortedSet для сущности, реализующей Comparable, может быть оправданным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...