Spring Data JPA选择具有使用Pageable功能的Distinct值

时间:2012-10-22 06:14:08

标签: spring hibernate java-ee spring-data spring-data-jpa

我在项目中使用Spring Data JPA。我有下一个Entity Bean" TABLE"。我已经创建了自己的存储库

TableRepository extends JpaRepository<Table, Long>, JpaSpecificationExecutor<TABLE>. 

我也创建了规范来选择过滤数据。我有bean应该选择的项目,并将它们分组在一个 .in()谓词列表中(类似于&#34; SELECT * FROM WHERE ID in(...)AND (...)和VALUE2中的值(...)...... &#34;)

public static Specification<Table> filteredListOfValues(final FilterRequestsParametersBean filterRequestsParametersBean) {
        return new Specification<Table>() {

            public Predicate toPredicate(Root<Table> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> listOfPredicates = createListOfPredicates(root, filterRequestsParametersBean);
                return criteriaBuilder.and(listOfPredicates.toArray(new Predicate[listOfPredicates.size()]));
            }
        };
    }

之后我 findAll()项目包含 TableRepository Pageable 参数。

this.getTableRepository().findAll(where(filteredListOfValues(filterRequestsParametersBean)), pageable);

视图:

id, value, etc..
 1,   1,   ...
 2,   1,   ...
 3,   2,   ...
 4,   2,   ...
 5,   3,   ...
 6,   5,   ...

问题。如何使用Pageable选择与 TABLE 中的字段 VALUE 不同的所有值。


当然我可以使用HashMap,但是我没有Spring Data JPA的Pageable功能。我需要排序和分页。

我也可以将规范用于一个字段值,例如:

    public static Specification<Long> filteredListOfValues(final FilterRequestsParametersBean filterRequestsParametersBean) {
            return new Specification<Long>() {

                public Predicate toPredicate(Root<Long> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {

....//somethind like that
criteriaQuery.select(root.<Long> get("value")).distinct(true);
....
List<Predicate> listOfPredicates = createListOfPredicates(root, filterRequestsParametersBean);
                    return criteriaBuilder.and(listOfPredicates.toArray(new Predicate[listOfPredicates.size()]));
                }
            };
        }

但在这种情况下,来自存储库TableRepository的方法findAll()只能接受以下规范:JpaSpecificationExecutor<Table>,而不是JpaSpecificationExecutor<Long>

感谢。

0 个答案:

没有答案