PK로 설정된 건 JpaRepository에서 바로 .findById 해서 쓸 수 있는거 같아 보인다. 근데 다른 값을 이용해서 하려면 따로 추상메서드를 만들어줘야 하는것같다.
예를 들어서 UserRepository 내에 userId로 객체를 찾기위해서 이런식으로 추상메서드를 선언해줬다. User findByUserId(String userId);
이걸 어떻게 추측하게 됐냐면 AnswerRepository에서 Question findByQuestionId(Long questionId)
이런 식으로 해줬는데 컴파일에러가 났다. 추측으로는 questionId가 PK이기 때문에 이미 JpaRepository에서 사용할 수 있기 때문에 그런거 같았다.
구현부가 없는 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;
}