给定问题的Spring Data Jpa规范实现

时间:2018-09-10 09:36:17

标签: sql spring spring-data-jpa specifications

我有一张类似

的桌子
ColA        ColB
Name1       1
Name1       2
Name2       1
Name2       3
Name2       5

我想将结果集提取为

ColA        ColB
Name1       1
Name2       1

我们如何在spring data JPA规范中实现它?

1 个答案:

答案 0 :(得分:2)

在您的存储库界面中添加以下代码。我认为应该可以。

    @Async
   @Query(value = "select * " +
                " from TableA ta " +
                "where ta.colb = :colb",nativeQuery=true)
    List<T> findByColA(@Param("colb") String colb);

具有规范

创建规范对象:

用于规范的标准函数(SUM,MAX或MIN)

javax.persistence.criteria.CriteriaQuery<T>选中此界面以查找更多信息。

    final class UserSpecifications {

        private UserSpecifications() {}

        static Specification<User> findData(String colb, String columnName) {
                  return new Specification<User>() {
                public Predicate toPredicate(Root<User> root,                                 
                                    CriteriaQuery<?> query, 
                                    CriteriaBuilder cb) {
                     root = query.from(User.class);
                     Predicate colbp = cb.equal(root.get(columnName), colb);
                     Expression<String> groupByExp = root.get(columnname).as(String.class);
                     query.where(colbp);
                     query.select(cb.min(root.get(column.getName())));
                     query.groupBy(groupByExp);                         
                }
            }
       }
    }

    Specification<User> spec = UserSpecifications.findData("1", "columnName");

    List<User> allUsers = repository.findAll(spec);

教程:Spring data Tutorial

规范示例:Spring Data specification

春季规范示例:Spring Specification How-to

Stackoverflow参考:Spring Specification