JPA查询返回错误的结果

时间:2016-06-10 10:23:06

标签: java jpa jpql

我已经实现了我的自定义CRUD存储库,它增加了一些额外的功能,比如在某个日期之后获取第一张下一张图片(我用它来查找其他图片之后的下一张图片)。但由于某种原因,它不会返回我预期的结果。有时返回的图片与用于搜索的图片相同(此图片的日期)。我100%肯定,我的所有照片都有独特的dateCreated。

任何人都知道我的代码出了什么问题?

public class PictureRepositoryImpl implements CustomPictureRepository {

@PersistenceContext
private EntityManager em;

@Override
public Picture next(Date date) {

    TypedQuery<Picture> q = em.createQuery("select p from Picture p where p.dateCreated > :date order by p.dateCreated asc", Picture.class);
    q.setParameter("date",date, TemporalType.DATE);
    Picture picture = q.setFirstResult(0)
            .setMaxResults(1)
            .getSingleResult();


    if(picture == null)
    {
        return null;
    }

    LoggerFactory.getLogger(DemoApplication.class).info("Fetched nextpicture: " + picture.getId() + ")");

    return picture;
}
}

enter image description here

更新 我期待在“2016-03-20”之后获得第一张照片,而不是它,我得到相同的照片。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,似乎主要问题是没有使用Timestamp,请参阅下面的代码。

 TypedQuery<Picture> q = em.createQuery("select p from Picture p where p.dateCreated < :date order by p.dateCreated desc", Picture.class);
    q.setParameter("date", date, TemporalType.TIMESTAMP);

    List<Picture> pictures = q
            .setMaxResults(1)
            .getResultList();