Я пытаюсь получить уникальное значение из столбца, скажем, «обозначение» из таблицы «employee_register». Я не знаю, как добиться этого, используя предикат запроса Dsl. Кто-нибудь может мне с этим помочь
как получить уникальные значения из столбца с помощью предиката queryDsl
Ответы (2)
Я нашел это, просматривая эту ссылку http://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-four-jpa-criteria-queries. Аналогичный вопрос был поднят зритель по имени raghu, а ниже ответ автора на вопрос. Может быть, этот ответ будет полезен другим
Ответ автора
У вас есть два варианта реализации этого:
Используйте ключевое слово DISTINCT JPQL при создании запроса с помощью аннотации @NamedQuery или @Query. Вызовите метод disctinct() класса CriteriaQuery в методе построителя спецификации (метод toPredicate() интерфейса Specification получает ссылку на объект CriteriaQuery в качестве параметра).
Пример JPQL:
SELECT DISTINCT p FROM Person p WHERE...
API критериев с построителем спецификаций:
public class PersonSpecifications {
public static Specification lastNameIsLike(final String searchTerm) {
return new Specification () {
@Override
public Predicate toPredicate(Root personRoot, CriteriaQuery< ?> query,CriteriaBuilder cb) {
query.distinct(true);
//Build Predicate
}
};
}
}
В вашем случае я бы добавил следующий метод в интерфейс CustomerRepository (или любой другой интерфейс вашего репозитория):
@Query("SELECT DISTINCT c.lastName FROM Customer c")
public List<String> findLastNames();
Вы можете вызвать Different() для объекта Query. Например (JPA + QueryDSL):
@Test
@Transactional
public void testQueryDSLDistinct() throws Exception {
log.debug("testQueryDSLDistinct started");
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
QEmployeeRegister er = QEmployeeRegister.employeeregister;
List<EmployeeRegister> tuples = queryFactory.select(
Projections.bean(EmployeeRegister.class, er.designation)).distinct()
.from(er).limit(10).fetch();
for (EmployeeRegister record: tuples) {
System.out.println(record.getDesignation());
}
}
select distinctиз таблицы? Можете ли вы предоставить sql для запроса, который вы хотите выполнить? - person David Fleeman   schedule 10.02.2014