У меня была точно такая же проблема с Criteria API. Простое решение для меня состояло в том, чтобы установить отличный от true в запросе, подобном
CriteriaQuery<Foo> query = criteriaBuilder.createQuery(Foo.class);
query.distinct(true);
Еще одна возможная опция, которая пришла мне в голову раньше, это просто передать полученный список в Set, который также по определению только один экземпляр объекта.
Это разрыв страницы .
[...]
Разрыв страницы также может использоваться для логического разделения исходного кода разделы. В Emacs есть команды и привязки клавиш, которые используют разрывы страниц, например как 'forward-page' (
Cx]
илиC -]
), 'backward-page' (Cx [
илиC - [
), и «узкая страница» (Cx np
). Другие функции, такие как 'mark-page', работают с содержимым страницы. См. Также PageMode.
Это действительно символ разрыва страницы, который на старых строчных принтерах переходил к следующей странице или бумаге. С точки зрения кода он ничего не делает; он нужен только для разделения кода на более крупные разделы. Существуют удобные команды Emacs для перехода к следующей и предыдущей «странице», и вставка этих символов использует это преимущество.
Команды Emacs backward-page
и forward-page
( Cx [
и Cx]
), среди прочего, используют ^ L
, помещенные в код в качестве разделителей.
Эта привычка не сильно распространилась на другие языки, кроме Emacs-lisp, но большинство языков обрабатывают ^ L
как пробел, так что вы можете использовать эти разделители на своем любимом языке, если вам нравится идея. Вы можете ввести свои собственные ^ L
s с помощью Cq Cl
.
При исследовании большого файла с множеством таких «страниц» функция «сузить до страницы» ( Cx np ) удобна: она скрывает все, что не находится в текущая страница. Затем, например, поиск имени функции, чтобы увидеть вызывающих, приводит только к совпадениям в этом разделе, так что вы действительно можете сосредоточиться на понимании суженной области.
Используйте расширение ( Cx nw ), чтобы увидеть все файл снова.