사실 연관관계는 하나 밖에 없다?
데이터 칸에 들어갈 수 있는 데이터의 개수는 1개이다**(중요)
예로 id 1,2 이런식으로 들어갈 수 없다
데이터베이스 컬럼 하나에는 값이 하나빡에 들어가지 못한다 (꼭 인지)
테이블의 필드값으로
리스트
는 본질적으로 들어가는 것이 불가능하다
쓰지말고 그냥 테이블 하나로 사용하자
불가능한건 없지만 복잡한 길이다
테이블 쪼개면 골치 아프다...
억지로 테이블을 나누지 말자
여기서 우리가 유심히 봐야할 부분은 바로
private List<Comment> comments = new ArrayList<>();
근데 리스트가 있다??
사실상 유일한 연관관계 (=N:1 사실상 같은말)
리스트?
실제 데이터 베이스에는 존재하지 않는 개념
JPA가 해주는 것
4차원을 상상하기에는 어렵다
실제론 없지만 마치 있는 것처럼 JPA가 해준다
@OneToMany
는 @ManyToOne
이 없으면 존재할 수 없다 (이건 법칙 @ManyToOne
이 있어야 @OneToMany
가 올수 있다)@ManyToOne
부터 일단 넣고 생각하기@ManyToOne
더 개수가 많은 놈한테 건다(@OneToMany
만 List<>
가 온다)@ManyToOne
2개 선언해주면 된다.@ManyToOne
에는 무조건 (fetch = FetchType.LAZY)
(같이 가는것)를 걸어줘야한다@ManyToOne
의 단짝 @JoinColumn(name = ("내가매핑할놈의(상대방) id")
-> 그냥 써주자@OneToMany
에게 무조건 해줘야 하는것(mappedBy = "나자신")
사실 이런건 존재하지 않는다
그냥 @ManyToOne
을 2번 쓰면 그게 바로 N:M이다
그러므로 사실상 존재하지 않는다
리스트를 필드에 선언할 수 없기 때문에 중간에 @ManyToOne
을 2개 가지는 테이블을 만들어준다
그리고 각각 있었던 엔티티에 필요하면 @OneToMany
를 사용해준다
흐름상 @ManyToOne
을 걸고 나서 @OneToMany
를 걸지 말지를 판단하자
@OneToMany(mappedBy = "board", cascade = CascadeType.REMOVE)
private List<Comment> comments = new ArrayList<>();
참고
누군가 8080을 사용하고 있다면?
kill $(lsof -t -i:8080) 을 이용하자