TIL 2021.03.23

kyukim·2021년 3월 23일
0

TIL

목록 보기
72/322

PK

PK로 설정된 건 JpaRepository에서 바로 .findById 해서 쓸 수 있는거 같아 보인다. 근데 다른 값을 이용해서 하려면 따로 추상메서드를 만들어줘야 하는것같다.

예를 들어서 UserRepository 내에 userId로 객체를 찾기위해서 이런식으로 추상메서드를 선언해줬다. User findByUserId(String userId);

이걸 어떻게 추측하게 됐냐면 AnswerRepository에서 Question findByQuestionId(Long questionId) 이런 식으로 해줬는데 컴파일에러가 났다. 추측으로는 questionId가 PK이기 때문에 이미 JpaRepository에서 사용할 수 있기 때문에 그런거 같았다.

구현부가 없는 if문

구현부가 없는 if문은 처음 봤다. boolean을 리턴하는 hasPermission()은 조건문에 따라 예외를 던진다. try문 내에서 예외가 던져지면 그 예외를 catch문에서 잡아서 그에따른 에러메세지를 출력해준다. if문이 예외없이 true가 되면 아무런일 없이 try catch 문을 나와서 다음 로직을 실행한다..멋진뎅?ㅋㅋ

근데 걍 boolean으로 해서 if로 할거없이 그냥 void로 해서 try에 넣어도 어차피 Exception이 날땐 Exception이 나니까 그렇게 할 필요없지 않나?

        메소드 () {
        try {
            if(hasPermission(question, session));
        } catch (AccessDeniedException e) {
            model.addAttribute("errormessage", e.getMessage());
            return "redirect:/users/login";
        }
}


          private boolean hasPermission(Question question, HttpSession session) {
        if (HttpSessionUtils.isLoginUser(session)) {
            throw new AccessDeniedException();
        }

        User sessionUser = HttpSessionUtils.getUserFromSession(session);

        if (question.userConfirmation(sessionUser)) {
            throw new AccessDeniedException();
        }

        return true;
    }

0개의 댓글