-
JPA 일대다 단방향을 일대다 양방향으로 작업카테고리 없음 2020. 3. 30. 02:12
일대다로 이루어진 team - member 두 entity관계에서
team이 메인이고 team을 기준으로 정보가 다루어진다면
일대다 단방향이 가장먼저 생각들고 단순하게 쓰일 수 있지만 이렇게 하면
jpa를 저장할 시
team 저장, member저장, 그리고 member에서 team FK를 업데이트하여 입력하는 아주 비효율적인 작업이
이루어진다.
따라서 권장되는게 일대다 양방향이다.
코드는 위와같이 구성했다.
여기서 @JsonIgnore 을 통해 json변환하여 바로 프론트를 던질때 발생하는 에러를 예방하기 위해
달았다. 이 외에
Jackson 2.0이상에서
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
를 사용하면 되지만
@id가 추가되고 team을조회했는데 team한번더 조회되었다.
@JsonIgnore와 비교된다.
아이디는 모두 자동생성하도록 되어있지만
jpa영속성, 생명주기에 따라
team을 생성하여 저장하고 그 팀을 person에 넣어 저장하여도 id값을 매칭시켜 저장시켜준다.
와같은 순서로 저장하였고, team을통해 person을 조회할 수 있는걸 확인하였다.
혹은 person 생성시 team을 넣지 않고 따로 team의 add를 통해 입력할 수도있다.
ps.
@JsonIgnore나 @JsonIdentityInfo 없이 해당 객체를 response한다면
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
와 같은 에러가 발생하니 주의하자
Team team = new Team("nam");
teamRepository.save(team);
Person person1 = new Person("yulheon",11);
Person person2 = new Person("laheon",8);
team.addPerson(person1);
personRepository.save(person1);
team.addPerson(person2);
personRepository.save(person2);댓글