728x90 개발공부 개발새발/DB21 JPA ) 영속성 전이, 고아 객체 영속성 전이 : CASCADE : 얘는 연관관계, 즉시로딩 지연로딩과 아무 상관 없어여~ 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶어요 ㄴ 부모 엔티티 저장할 때 자식 엔티티도 함께 저장하고 싶음... 부모를 persist 할 때, 얘랑 관련 된 자식들도 함께 persist 할 거야 @OneToMany(mappedBy="parent", cascade=CascadeType.ALL) 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다 엔티티를 영속화 할 때 편리함을 주는 것뿐 하나의 부모만 해당 자식들을 관리할 땐 좋다 좋은 예) 게시판, 첨부파일 경로... 게시판에서만 첨부파일 경로를 씀 나쁜 예) 자식이 여러군데에서 쓰이면 ㄴㄴ 고아 객체 고아 객체란???? .. 2022. 11. 25. JPA) 즉시로딩과 지연로딩??? 지연 로딩 @ManyToOne(fetch = FetchType.LAZY) //team을 지연로딩 하겠어! @JoinColumn(name = "TEAM_ID") private Team team 지연 로딩??? 얘는 일단 프록시 객체로 두겠어~(안불러올거임) 실제로 얘를 사용하는 시점에 초기화 할거야~ 그 전엔 프록시객체임(껍데기만 가져옴) 즉시 로딩 @ManyToOne(fetch = FetchType.EAGER) //team을 즉시로딩 하겠어! @JoinColumn(name = "TEAM_ID") private Team team 즉시 로딩??? 얘는 둘 다 함께 자주 쓰이니까 엔티티 초기화 둘이 같이 해줘~(쿼리 함께 바로ㄱㄱ) JPA 구현체는 가능하면 조인을 사용해서 SQL 한번에 함께 조회 그런데..... 2022. 11. 25. JPA) 프록시란 무엇인가 프록시? em.find() 실제 객체 조회 getReference() DB 조회를 미루는 가짜(프록시) 엔티티를 조회함니다 ㄴ 껍데기는 있는데 안에가 비어있음 프록시 실제 객체의 참조를 보관하고 프록시 객체를 호출하면? 실제 객체 메소드를 호출합니다 프록시 객체에서 메소드를 호출하면? 1. 영속성 콘텍스트에 초기화를 요청함 2. DB에서 조회해줌 3. 실제 Entity 생성함 4. 프록시 객체에 target(진짜 엔티티 객체를 가리키는 녀석)으로 해당 메서드를 불러온다 (마치 객체에 주소가 없다가 초기화해서 주소를 넣는 것과 비슷한듯) **프록시 특징** - 프록시 객체는 처음 사용할 때 한 번만 초기화됨 - 프록시 객체를 초기화할 때, 프록시 객체가 실제 엔티티로 바뀌는 게 아님 프록시 객체를 통해서 .. 2022. 11. 25. JPA) 상속관계 매핑 (여러 전략들과 @MappedSuperclass) 관계형 DB는 상속 관계가 없으나 슈퍼타입 - 서브타입 관계는 상속 관계와 비슷하긴 해서 슈퍼타입 - 서브타입 관계를 자바에서 상속 관계로 구현한 것이 상속관계 매핑이다 구현 방법 세 가지 조인 전략 : 슈퍼, 서브타입을 각각 테이블로 만들어서 조인으로 불러오기 단일 테이블 전략 : 통합 테이블로(하나로 통합) 만들기 구현 클래스마다 테이블 전략 : 서브타입 테이블만 만들기 어노테이션 @Inheritance(strategy = Inheritance.Type.~~~) Type 뒤에 무슨 전략을 쓸 건지 적어주면 됨 JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name=“DTYPE”).. 2022. 11. 25. JPA) 연관관계 매핑 ( 다대일, 일대다, 다대일, 다대다 ) 다양한 연관관계 매핑! 연관관계 매핑시 고려사항 3가지 - 다중성 (1:n , n:1 ....) - 단방향, 양방향 - 연관관계의 주인 1) 다중성 다대일 @ManyToOne 제일 많이 씀 일대다 @OneToMany 자주 씀 일대일 @OneToOne 가끔 씀 XX다대다 @ManyToMany 실무에서 쓰면 안 됩니다 다중성 애매할 때? 어떻게 알 수 있지? - 반대로 생각해보자 회원과 팀의 관계 / 팀과 회원의 관계 n : 1 / 1 : n 2) 단방향, 양방향 테이블은? 외래 키 하나로 두 테이블이 연관관계 사실 방향이라는 개념 XX다대다 객체는? 참조용 필드가 있는 쪽으로만 참조 가능함 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 -> 객체 입장에서는 방향이 하나입니당! 서로 왔다갔다 하는 것뿐.. 2022. 11. 24. JPA) 연관관계 매핑 연관관계 매핑 객체의 참조와 테이블의 외래 키를 매핑하자 ! 방향 : 단방향, 양방향 다중성 : n:1, 1:n, 1:1, n:m (다대일, 일대다, 일대일, 다대다) * 연관관계의 주인 : 객체 양방향 연관관계는 관리주인이 필요 * 단방향 연관관계(객체지향모델링) // FK를 가지고 있는 객체에게 얘랑 조인할거야 알려주는 애너테이션 @ManyToOne // Member가 1, team이 n @JoinColumn(name = "TEAM_ID") // 얘랑 JOIN 할거얌 private Team team; =============================== // 팀 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); // 회원 저장.. 2022. 11. 24. 이전 1 2 3 4 다음 728x90