根据规范从Spring Data获取数据库

时间:2017-10-15 17:31:19

标签: java spring hibernate jpa eclipselink

我有一个创建规范的方法

 public static Specification<MovieEntity> getFindPredicate(
        final String title
) {
    return (final Root<MovieEntity> root, final CriteriaQuery<?> cq, final CriteriaBuilder cb) -> {
        final List<Predicate> predicates = new ArrayList<>();

        if (StringUtils.isNotBlank(title)) {
            final Join<MovieEntity, MovieTitle> title_ = root.join(MovieEntity_.title);
            predicates.add(cb.like(title_.get(MovieTitle_.title), "%" + title + "%"));
        }

      return cb.and(predicates.toArray(new Predicate[predicates.size()]));
   };

}

此规范应发送到JPA存储库

final Page<MovieEntity> movieEntities = this.movieRepository.findAll(
            MovieSpecs.getFindPredicate(
                    title),
            page);

这就是奇怪的事情开始发生的地方。如果数据库中存在具有特定标题的对象,则它将返回页面对象上指定数量的对象。因此,如果我输入了页面大小为10的页面,并且数据库中至少有一个具有指定标题的对象,那么JPA方法将向我返回10个相同的对象。

例如,我向自己展示。

我给了标题jonki1。在数据库中,我只有一个名为jonki1的对象。

代码:

for (Iterator<MovieEntity> it = movieEntities.iterator(); it.hasNext(); ) {
        MovieEntity entity = it.next();
        System.out.println(entity.getTitle().getTitle());
    }

给我回报

jonki1
jonki1
jonki1
jonki1
jonki1
jonki1
jonki1
jonki1
jonki1
jonki1

10个对象,因为page大小为10,但数据库中的对象只有一个。为什么会这样?

0 个答案:

没有答案