JPA 查询 returns 错误结果
JPA query returns wrong result
我已经实现了我的自定义 CRUD 存储库,它添加了一些额外的功能,比如在某个日期之后获取第一张下一张图片(我正在使用它来查找其他图片之后的下一张图片)。但出于某种原因,它并没有 return 我预期的结果。有时 returned 图片与用于搜索的图片相同(这张图片的日期)。我 100% 确定,我所有的照片都有唯一的创建日期。
有人知道我的代码有什么问题吗?
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;
}
}
更新:
我期待在“2016-03-20”之后得到第一张图片,而不是它,我得到了相同的图片。
我已经解决了这个问题,似乎主要问题不是使用时间戳,请参见下面的代码。
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();
我已经实现了我的自定义 CRUD 存储库,它添加了一些额外的功能,比如在某个日期之后获取第一张下一张图片(我正在使用它来查找其他图片之后的下一张图片)。但出于某种原因,它并没有 return 我预期的结果。有时 returned 图片与用于搜索的图片相同(这张图片的日期)。我 100% 确定,我所有的照片都有唯一的创建日期。
有人知道我的代码有什么问题吗?
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;
}
}
更新: 我期待在“2016-03-20”之后得到第一张图片,而不是它,我得到了相同的图片。
我已经解决了这个问题,似乎主要问题不是使用时间戳,请参见下面的代码。
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();