-1

私は次のように条件クエリを使用しています: 過ぎた日時の後に予約を取得したいのですが、今は同じ日付の過ぎた時間より前に予約を取得しています.助けてください..

 @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();
        }
4

1 に答える 1

1

文字列としてフォーマットされた日付と時刻を比較することはお勧めできません。結果はフォーマットによって異なります。クラスに一意のDateフィールドがある方がよいでしょう。Reservation

@Temporal(TIMESTAMP) Date date;

クエリで日付比較を使用する:

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

この方法では、パラメーターが日付と時刻の両方を保持するためtime、メソッドのパラメーターをgetReservationByAndUserIdAndTypeAndDateTime省略できます。date

于 2013-01-17T09:52:13.287 に答える