JPA 2

JPA를 쓰는데 Fk 제약조건 때문에 골머리 썩고 있다면 cascade를 사용해서 쉽게쉽게 갑시다

FK 제약조건으로 인해 객체를 삭제할 때는 제거하려는 객체를 참조하고 있는 객체들부터 먼저 제거해줘야 한다. Question 객체를 삭제하고자 하지만 Notification에서 FK로 Question의 id를 참조하고 있는 상황이다. 그래서 Question 객체를 삭제하려고 할 때 연관된 Notification 객체들부터 전부 제거해줘야 했다. jpa의 orpahnRemoval=true를 이용하고 Question 객체의 필드인 Notification 배열을 clear 해주는 방식으로 구현을 했었다. 그런데 FK 관계가 한두개가 아니다보니 이렇게 하는 건 중간에 실수가 발생하기 쉽겠다는 생각이 들었다. @Transactional public void delete(Question question) { // ..

jpa 사용 시 양방향 연관 관계에 모두 @JsonIgnore 처리

Stack과 partStack은 oneToMany, ManyToOne 양방향 연관 관계를 맺고 있었다. 때문에 사용자 정보를 가져올 때 getMyStacks()만 호출했는데도 partStack 데이터까지 읽어왔다. 전혀 필요 없는 데이터고 요청도 하지 않았는데 말이다. 더 큰 문제는 User가 UserPart를 호출하고 UserPart가 또 User를 호출하면서 무한 루프에 빠진 상황이었다. 그렇다. jackson의 처리 방식 때문이다. 나는 getXXX를 통해 특정 테이블의 정보만 얻어오고 싶었는데 그 테이블에 매핑된 객체에서 다른 테이블의 객체를 참조하고 있었다. @XXToMany는 기본 fetch 방식이 LAZY이기 때문에 많은 연관된 데이터를 읽어오도록 요청하지 않고 단지 프록시 객체를 받아온다...