공부141 [JPA] 프록시와 연관관계 관리(지연로딩) 프록시 em.find() : DB를 통한 실제 엔티티 객체 조회 em.getReference() : DB조회를 미룬 가짜(프록시) 엔티티 객체 조회 사용되는 시점에 조회함 프록시 특징 실제 클래스를 상속받아 만들어진다. 프록시 객체를 통해 실제 객체에 접근하는 것이다. 처음 사용시 한번만 초기화한다. 즉시로딩과 지연로딩 지연로딩 : 프록시로 조회 LAZY 즉시로딩 EAGER Member와 Team을 보통 동시에 사용한다면 사용한다. 프록시를 사용하지 않는다. 즉시로딩 주의 가급적 지연로딩만 사용한다(특히 실무에서) 즉시로딩은 N+1 문제를 일으킨다. OneToMany, ManyToMany은 default가 LAZY이다. ManyToOne, OneToOne은 default가 즉시로딩이다. → LAZY로 설.. 2022. 7. 2. [JPA] 다양한 연관관계 매핑 연관관계 주인 테이블 : 외래키 하나 객체 : 참조가 두군데 (A→B, B→A) 연관관계 매핑 다대일 N:1 @ManyToOne 일대다 1:N @OneToMany 일(1)이 연관관계 주인 다(N) 쪽에 외래키가 존재 연관관계 관리를 위해 추가로 UPDATE SQL 실행된다. 즉, 1:N 매핑보다 N:1 양방향 매핑을 사용하자. @OneToMany(mappedBy = "team") private List members = new ArrayList(); 일대일 1:1 @OneToOne 주 테이블이나 대상 테이블 중에 외래키를 선택할 수 있다. 반대편은 mappedBy 매핑하기 // Member @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker;.. 2022. 7. 2. [JPA] 연관관계 매핑 기초 1. 단방향 연관관계 Member(N)와 Team(1) 회원 ManyToOne JoinColumn(name = “TEAM_ID”) 2. 양방향 연관관계와 연관관계의 주인 그렇다면, Team에서 Member 호출은? Team에서, List members를 어떻게 호출할 수 있을까. Team에 List members 를 OneToMany로 추가한다. @OneToMany(mappedBy = "team") private List members = new ArrayList(); DB상 테이블은 변하지 않는다. 1. 연관관계의 주인 = 외래키 관리자 주인(N) @JoinColumn(name = "TEAM_ID") : 외래키를 가짐 주인 : ManyToOne, OneToOne 주인X(1) : mappedBy 속성으로.. 2022. 7. 2. [JPA] 엔티티 매핑 1. 객체와 테이블 매핑 @Entity @Table @Entity : JPA가 관리, 엔티티라 함 주의 기본 생성자 필수 파라미터없음 public protected final 클래스, enum, interface, inner 클래스 사용 불가 저장할 필드에 final 사용불가 (변경가능하기 때문) @Table : 엔티티와 매핑할 테이블 지정 name : 매핑할 이름 catalog : DB 카탈로그 매핑 schema : DB 스키마 매핑 uniqueConstraints(DDL) : DDL 생성시 유니크 제약조건 생성 2. 데이버베이스 스키마 자동생성 DDL을 애플리케이션 실행시점에 자동 생성 테이블중심 → 객체중심! DB 방언(dialect)을 사용해서 DB에 맞는 DDL 생성 persistence.xml.. 2022. 7. 2. [JPA] 영속성 관리 - 내부 동작 방식 영속성 컨텍스트 엔티티를 영구 저장하는 환경 JPA를 이용하는데 가장 중요한 용어 EntityManager.persist(entity) 영속성 컨텍스트는 논리적인 개념(눈에 보이지 않는다) 엔티티 매니저를 통해 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속 : 영속성 컨텍스트와 전혀 관계없는 새로운 상태 Member member = new Member("member1", "회원1"); 영속 : 영속성 컨텍스트에 관리되는 상태 em.persist(member); 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 // 회원 엔티티를 영속성 컨텍스트에서 분리 em.detach(member); 삭제 : 삭제된 상태 em.remove(member) 영속성 컨텍스트의 이점 1차 캐시(영속성 컨텍스트라고 이해해.. 2022. 7. 2. 9장 제네릭스 kotlin in action 책을 통한 공부입니다. 1. 제네릭 타입 파라미터 1. 타입 파라미터 T : 타입파라미터 선언 수신/반환 : 수신객체와 반환타입에 쓰인다. 타입 파라미터 X : 이 변수는 리스트다. 타입 파라미터 사용 : 이 변수는 문자열 리스트다 (명확) → 코틀린에서, 제네릭 타입 인자를 프로그래머가 명시하거나, 컴파일러가 추론할 수 있어야 한다. fun List.slice(indices: IntRange) : List val letters = ('a'...'z').toList() letters.slice(0..2) // 프로그래머가 명시 letters.slice(10..13) // 컴파일러가 타입 인자를 추론. T가 Char 라는 사실을 추론 확장 프로퍼티 선언도 가능하다. val L.. 2022. 7. 2. 이전 1 ··· 5 6 7 8 9 10 11 ··· 24 다음