강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

정은선님의 프로필 이미지
정은선

작성한 질문수

NullPointerException 발생시 트랜잭션 롤백 안되는 이유

작성

·

214

0

@Transactional(rollbackFor = {Exception.class})
    public HashMap<String, Object> saveOrder(OrderDto orderDto){
        HashMap<String, Object> returnMap = new HashMap<String, Object>();
        try{
            String orderId = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
            Device device = deviceRepo.findDeviceByDeviceId(orderDto.getDeviceId());
            if(ObjectUtils.isEmpty(device)){
                returnMap.put("resCode", ResMessage.DeviceNotFound.getResCode());
                returnMap.put("resMsg", ResMessage.DeviceNotFound.getResMessage());
                return returnMap;
            }

            orderRepo.save(OrderList.builder()
                    .orderId(orderId)
                    .deviceId(orderDto.getDeviceId())
                    .totalPrice(orderDto.getTotalPrice())
                    .couponNum(orderDto.getCouponNum())
                    .build());

            //쿠폰 사용 적용
            if(!StringUtils.isEmpty(orderDto.getCouponNum())){
                CouponList couponList = couponListRepo.findByCouponNum(orderDto.getCouponNum());
                if(!ObjectUtils.isEmpty(couponList))
                    couponList.setUsed(device);
            }

            returnMap.put("resCode", ResMessage.Success.getResCode());
            returnMap.put("resMsg", ResMessage.Success.getResMessage());
            return returnMap;
        } catch (Exception e) {
            returnMap.put("resCode", ResMessage.SystemError.getResCode());
            returnMap.put("resMsg", ResMessage.SystemError.getResMessage());
            return returnMap;
        }
    }

 

주문하는 api 연습하고 있는데요 ㅠㅠ

쿠폰을 사용한 쿠폰으로 적용하는 부분에서 일부로 없는 쿠폰번호를 날려서 NullPointerException을 내봤는데 트랜잭션 롤백이 안되고 주문한 내용이 DB에 적용되더라구요 ㅠㅠ

unchecked exception이니까 롤백되는게 맞는거같은데 롤백이 안되서요 ㅠㅠ 혹시 아시는분 있을까요?

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
정은선님의 프로필 이미지
정은선

작성한 질문수

질문하기