본문 바로가기
728x90

개발공부 개발새발127

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.
JPA) 엔티티매핑(객체와 테이블, 필드와 컬럼, 기본 키) 엔티티 매핑! 객체와 테이블 매핑 @Entity , @Table 필드와 컬럼 @Column 기본 키 @Id 연관관계 매핑 @ManyToOne, @JoinColumn 객체와 테이블 매핑? @Entity가 붙은 클래스는 JPA가 관리한다, 엔티티라고 부른다 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - 기본 생성자 필수 - final, enum, interface, inner 클래스 사용 불가 - 저장할 필드에 final 사용 불가(수정이 안대자낭) @Entity는 기본값이 클래스 이름 그대로, @Entity(name="")도 가능하긴 함 Entity name은 JPA에서 얘를 관리할 때 쓸 이름 @Table 엔티티와 매핑할 테이블명을 지정한다 데이터베이스 스키마 자동 생성 애플리케이션 .. 2022. 11. 24.
728x90