как получить уникальные значения из столбца с помощью предиката queryDsl

Я пытаюсь получить уникальное значение из столбца, скажем, «обозначение» из таблицы «employee_register». Я не знаю, как добиться этого, используя предикат запроса Dsl. Кто-нибудь может мне с этим помочь


person Deepak Ramakrishnan Kalidass    schedule 07.02.2014    source источник
comment
Вы просто пытаетесь select distinct из таблицы? Можете ли вы предоставить sql для запроса, который вы хотите выполнить?   -  person David Fleeman    schedule 10.02.2014
comment
выберите количество (отличное обозначение) из employee_register   -  person Deepak Ramakrishnan Kalidass    schedule 11.02.2014


Ответы (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();
person Deepak Ramakrishnan Kalidass    schedule 11.02.2014

Вы можете вызвать 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());
    }
}
person groschan    schedule 15.06.2016