我正试图从列“employee_register”中的一个专栏中获取一个唯一的值。我不知道如何使用查询Dsl谓词来实现这一点。任何人都可以帮助我
答案 0 :(得分:2)
我在浏览此链接时发现了这一点 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对象的引用作为参数)。
SELECT DISTINCT p FROM Person p WHERE ...
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();
答案 1 :(得分:0)
您可以在Query对象上调用distinct()。例如(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());
}
}