ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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);

     

    댓글

Designed by Tistory.