본문 바로가기

강의 정리28

7. 프록시와 연관관계 관리 1. 프록시 기초 em.find() vs em.getReference() em.find() : 실제 엔티티 객체를 조회한다. em.getReference() : 가짜(프록시) 엔티티를 조회한다. (아직 쿼리가 나가지 않는다.) 실제 필요한 경우에 쿼리가 나간다. em.getReference() 0. member = em.getReference(Member.class, id) 1. member.getName() 1.1 프록시 객체의 target이 null 이다. 2. 영속성 컨텍스트에 초기화 요청을 한다. 3. 영속성 컨텍스트는 DB 에서 해당 객체를 조회한다. 4. Entity를 실제로 생성한다. 5. 프록시는 target.getName() 을 호출한다. 프록시 특징 (em.getReference()) .. 2021. 1. 1.
6. 고급 매핑 1. 상속관계 매핑 패러다임의 불일치 객체 에는 상속관계가 존재 RDB 에는 상속관계 x 상속관계 매핑 객체의 상속을 DB의 슈퍼타입, 서브타입 관계 모델링을 사용하여 매핑 3가지 전략을 사용할 수 있다. 1.1. 조인전략 특징 [INSERT] ALBUM 을 추가한다고 했을 때 ITEM, ALBUM 각 각 한번씩, 하나를 저장할 때 두개의 insert가 발생한다. [SELECT] ALBUM 을 조회한다고 했을 때 ITEM과 ALBUM 테이블을 JOIN 하여 가져와야한다. 어떤거와 JOIN을 할 지 구분해야 하기 때문에 ITEM 에 DTYPE 컬럼이 추가된다. 가장 정규화된 방식 1.2. 단일테이블 전략 특징 하나의 테이블이 모두 넣은 뒤, DTYPE 컬럼을 기반으로 조인을 하여 어떤 데이터가 저장되어있는.. 2020. 12. 29.
5. 다양한 연관관계 매핑 1. 다대일 [N:1] 다(N)가 연관관계 주인인 경우 가장 많이 사용되는 연관관계 @ManyToOne + @JoinColumn 2. 일대다 [1:N] 일(1) 이 연관관계의 주인인 경우 @OneToMany + @JoinColumn (@JoinColumn 이 없으면 조인테이블 방식을 사용하게 된다.) 2.1. 일대다 단방향 객체 관점 아래의 그림을 보면, Team 에서 Member 로 가는 참조가 있다. 테이블 관점 FK 는 어쩔 수 없이 다(N) 쪽에 있다. 일전에 고려했던 넌센스한 문제가 생긴다. Team.members.add(member) 을 하면 Member 테이블에 있는 FK 가 변경된다. Team 객체에 변경을 가했는데, 데이터베이스 관점에서는 Member 테이블이 갱신되는 문제. 추가적으로 .. 2020. 12. 28.
4. 연관관계 매핑 기초 패러다임의 불일치 테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 1. 양방향 연관관계 단방향 양방향 패러다임의 불일치 테이블은, Foreign Key 한개만 있으면 양쪽으로 모두 조회가 가능하다. 객체는 양쪽에 모두 세팅해줘야 양쪽으로 모두 조회가 가능하다. 2. 연관관계 주인과 mappedBy 객체와 테이블이 관계를 맺는 차이 객체 = 연관관계 2개 = 단방향 연관관계 2개 회원 -> 팀 연관관계 1개 (단방향) 팀 -> 회원 연관관계 1개 (단방향) 테이블 = 연관관계 1개 회원 팀 연관관계 1개만으로, (양방향)을 모두 접근할 수 있음 객체의 양방향 관계는 사실, 서로 다른 단방향 관계 2개이다. 테이블은 하나의 외래키로, 양방향 연관관계를.. 2020. 12. 27.