【问题标题】:Criteria query for fetching the data after particular date and time在特定日期和时间之后获取数据的条件查询
【发布时间】:2012-12-31 17:55:15
【问题描述】:

我使用的条件查询如下:我想在我过去的时间和日期之后获取预订。但现在我在同一日期过去的时间之前获得预订。请帮助..

 @GET
        @Path("/getReservationByUserIdAndTypeAndDateTime/{userid}/{type}/{date}/{time}")
        public List<Reservation> getReservationByAndUserIdAndTypeAndDateTime(@PathParam("userid") int uid, @PathParam("type") int tid,@PathParam("date") Date date,@PathParam("time") Time time) {
            CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Reservation> criteria = builder.createQuery(Reservation.class);
            Root<Reservation> r = criteria.from(Reservation.class);
            TypedQuery<Reservation> query = em.createQuery(
                criteria.select(r).where(new Predicate[]{
                        builder.equal(r.get(Reservation_.usersId), uid), 
                        builder.equal(r.get(Reservation_.reservationsType), tid),

                        builder.greaterThanOrEqualTo(builder.concat(r.get(Reservation_.date), " "+r.get(Reservation_.time)), date.toString()+" "+time.toString())}));
            return query.getResultList();
        }

【问题讨论】:

  • 您能否显示Reservation 类的datetime 字段的映射?
  • 我只是简单地添加了这两个字段..日期和时间作为字符串并创建了getter和setter..
  • @Column(nullable=false, length=10) 私有字符串日期;

标签: java sql hibernate jpa hibernate-criteria


【解决方案1】:

不建议比较格式化为字符串的日期和时间,结果可能取决于格式。在Reservation 类中拥有一个唯一的Date 字段会更好:

@Temporal(TIMESTAMP) Date date;

并在查询中使用日期比较:

 builder.greaterThanOrEqualTo(r.get(Reservation_.date), date)

这样getReservationByAndUserIdAndTypeAndDateTime 方法中的time 参数可以省略,因为date 参数将同时保存日期和时间。

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多