how to get unique values from a column using queryDsl predicate
我试图从表" employee_register"的列" designation"中获取唯一值。 我不知道如何使用查询Dsl谓词来实现这一点。 谁能帮我这个
您可以在Query对象上调用distinct()。例如(JPA + QueryDSL):
1 2 3 4 5 6 7 8 9 10 11 12 13 | @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()); } } |
我在通过此链接时找到了
http://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-four-jpa-criteria-queries。一个名为raghu的观众提出了类似的问题,下面是作者的回答。这个问题可能对其他人有帮助
作者的答案
您可以通过以下两种方法实现此目的:
使用@NamedQuery或@Query批注创建查询时,请使用JPQL的DISTINCT关键字。
在规范构建器方法中调用CriteriaQuery类的disctinct()方法("规范"接口的toPredicate()方法获取对CriteriaQuery对象的引用作为参数)。
JPQL示例:
选择个人p从p所在的地方...
具有规范构建器的标准API:
1 2 3 4 5 6 7 8 9 10 11 12 | 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接口(或您的存储库接口是什么):
1 2 | @Query("SELECT DISTINCT c.lastName FROM Customer c") public List<String> findLastNames(); |