콘텐츠로 이동

2021 07 30

2021-07-30

CascadeType.REMOVE vs OrphanRemoval

  • 참고: https://www.baeldung.com/jpa-cascade-remove-vs-orphanremoval
  • CascadeType.REMOVE - Child 엔티티를 삭제하거나, Parent의 삭제에 따른 Child 엔티티들 삭제 - ex. OrderRequest가 ShipmentInfo를 포함함 - OrderRequest가 지워지면 ShipmentInfo도 삭제함
  • OrphanRemoval - Orphaned 된 엔티티를 DB에서 지우는 용도 - Orphaned: 부모에 더 이상 attached 되지 않은 엔티티 - @OneToMany 관계의 참조를 끊어버리는 경우 발생

연관관계 편의 메서드

  • 참고: https://backend.gitbooks.io/jpa/content/chapter5.html
  • 양방향 연관관계 신경 써줄때 (무한루프 기억나지?)
    public class Member {
        private Team team;
    
        public void setTeam(Team team) {
            this.team = team;
            team.getMembers().add(this);
        }
    }
    
    //연관관계 설정
    member1.setTeam(teamA);
    member1.setTeam(teamB);
    Member findMember = teamA.getMember(); //member1이 여전히 조회
    
    //변경하기!
    public class Member {
        public void setTeam(Team team) {
            //기존 팀과 관계를 제거
            if (this.team != null) {
                this.team.getMembers().remove(this);
            }
            this.team = team;
            team.getMembers().add(this);
        }
    }
    
  • 기존 관계들을 고려하면서 setter를 만들어주자 - 무지성으로 그냥 집어넣으면 다 깨져!

Logging Timezone

  • 참고: https://blog.naver.com/tyboss/70102615639
  • java -jar -Duser.timezone=Asia/Seoul
  • JVM에서 시간을 설정하고 돌리는구나... 그러다 보니 로그에서 JVM 기본시간으로 찍혀 - 디폴트 상태로는 GMT라네 - OS랑 JDK 벤더도 탄다네