

User는 여러개 게시글 쓰지만 게시글은 한명이서 쓴다. 이 둘의 관계는 1 : N

그럼 foreign키는 누가 가져야 되나
foreign키의 주인은 Many(Board)가 가져야함
One이 가지면 원자성이 깨짐
① 결론 : FK는 Many가 가진다.

영화 예매 같은 경우는 다르다. User가 여러 Movie를 예매할 수 있고 한 Movie를 여러 User가 볼 수 있다. 이 둘의 관계는 N : N
N : N 관계는 무조건 원자성이 깨지므로 중간 테이블이 필요

원래 테이블은 N 중간테이블은 1인 N : 1 이 두 개 생김
② 결론 : N : N 의 관계는 중간 테이블이 생긴다.

구독하기는 ②로 N : N 테이블로 Subscribe에 두가지 필드가 필요하다.
칼럼명이 맘에 안들어서 커스텀 해줄꺼임
@JoinColumn() : 칼럼 이름 설정
@Table() : 매핑할 테이블 지정
@Table(
uniqueConstraints = {
@UniqueConstraint(
name="subscribe_uk",
columnNames = {"fromUserId", "toUserId"}
)
}
)
@Modifying : INSERT, DELETE, UPDATE를 네이티브 쿼리로 작성하려면 해당 어노테이션 필요 !!
@Query : 네이티브 쿼리
mSubscribe에서 m은 내가 만들었다라는 뜻
: -> 변수를 바인딩 해서 아래 ( ) 안에 넣겠다.
@Query(value = "DELETE FROM subscribe WHERE fromUserId =:fromUserId AND toUserId = :toUserId", nativeQuery = true)
void mUnSubscribe(int fromUserId, int toUserId);
SubscribeService 에 try..catch문으로 예외처리 보내주고
에러 메세지 받을 CustomApiException 만들어주고
ControllerExceptionHandler 에 등록해 주고