섭섭한 개발일지

QueryDSL JPA로 생성된지 일정시간이 지난 데이터 가져오기 본문

프로그래밍/JPA

QueryDSL JPA로 생성된지 일정시간이 지난 데이터 가져오기

Seop 2024. 3. 21. 22:46

프로젝트에서 데이터가 생성되면 create_at 필드에 생성 일자 데이터가 삽입된다.

프로젝트 로직에서 생성된 데이터의 스테이터스가 일정 시간이 지나도 변경되지 않으면 해당 데이터를 삭제하는 로직이 필요했다.

SQL로 작성한 바는 아래와 같았다.

SELECT id, time(created_at)
FROM restaurant_order
WHERE time (subdate(now(), INTERVAL 30 MINUTE)) >= time(created_at)
AND status = 1
AND deleted_at IS NULL;

이걸 QueryDSL JPA 로 표현을 해야하기에 찾아보고 테스트 해본 결과

아래와 같이 작성을 하면 SQL과 동일하게 작동이 되었다.

public List<RestaurantOrder> findOrderToDelete() {
    BooleanExpression conditions =
            restaurantOrder.createdAt.before(LocalDateTime.now().minusMinutes(30))
                    .and(restaurantOrder.orderStatus.eq(RestaurantOrderStatus.ADD_INFO))
                    .and(restaurantOrder.deletedAt.isNull());

    return jpaQueryFactory
            .selectFrom(restaurantOrder)
            .where(conditions)
            .fetch();
}
Comments