반응형 전체 글126 [JPA] 지연 로딩 LAZY , 즉시 로딩 EAGER # 지연 로딩 가급적 지연 로딩 사용! 연관된 엔티티를 프록시 객체로 가져옴 실제 사용할 때 프록시 초기화(디비에서 조회해서 가져옴) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; # 즉시 로딩 주로 연관된 엔티티를 함께 조회해서 사용할 때 사용 조인 쿼리로 조회 ★@ManyToOne, @OneToOne => 기본이 즉시로딩이므로 Lazy로 설정해줘야함★ @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; ★즉시 로딩은 JPQL에서 N+1 문제 일으킴★ JPQL은 SQL로 번역해서 실행함 (최적화X) -.. 2022. 4. 6. [JPA] 프록시 entityManager.find() 데이터베이스 조회를 통해 실제 엔티티 객체 반환 entityManager.getReference() 데이터베이스 조회를 통하지 않고 프록시 엔티티 객체 반환 실제 사용시에 DB를 조회해서 실제 Entity 생성(프록시 객체 초기화) ex. member.getUsername() # 프록시 특징 - 실제 클래스를 상속 받아서 만들어짐 - 실제 클래스와 겉모양이 같음 - 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨 - 프록시 객체는 실제 객체의 참조(target)를 보관 - 프록시 객체 호출하면 실제 target의 메소드 호출 - 처음 사용할 때 한 번만 초기화 - 프록시 객체 초기화 : 프록시가 실제 엔티티가 되는 것이 아니라 실제 엔티티.. 2022. 4. 6. [JPA] 상속관계 매핑 - 상속 전략 DB의 슈퍼타입 서브타입 관계를 JPA에서는 객체의 상속 관계로 풀어낼 수 있다 아래 세 가지 전략 중 조인 전략을 기본으로 사용하고, TABLE PER CLASS 전략은 사용하지 않도록 하는 것이 좋다 상속 관계 (세 가지 전략 모두 상속 관계는 동일) 부모 클래스 - Item 엔티티 자식 클래스 - Album, Movie, Book 엔티티 1. 조인 전략 - 기본 상속 전략 - @Inheritance(strategy = InheritanceType.JOINED) @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn public class Item { @Id @GeneratedValue private Long id; ... 2022. 4. 6. [H2] Database not found, either pre-create it or allow remote database creation H2 데이터베이스에서 새로운 데이터베이스에 접속하려할 때 아래와 같은 에러문구를 볼 수 있다 ERROR: Database "/Users/username/jpashop" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-210] [원인] /Users/username 에 데이터베이스 파일이 생성되지 않았기 때문 jpashop.mv.db 파일이 생성되어야함 데이터베이스 파일이 생성되기 전에 JDBC URL에 tcp://localhost를 넣어서 접속하려고 할 경우 jdbc:h2:tcp://localhost/~/jpashop [해결방법] JDBC URL에 tc.. 2022. 4. 4. [JPA] 영속성 컨텍스트 / 엔티티의 생명주기 # 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" EntityManager.persist(entity); // 객체를 영속성 컨텍스트에 저장(영속화) 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 # 엔티티의 생명주기 1. 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); // 비영속 2. 영속 영속성 컨텍스트에 관리되는 상태 Member member = new Member(); .. em.persist(entity); // 영속 상태 * 엔티티매니저를 통해 persist 해줘야만 영속 상태! DB에 저장되는건 아님! tx.commit(); // 트랜잭션을 커밋할때 DB에 저장 3. 준영속 영속성 컨텍스트에 저장되었다가 분리된 상태 em.det.. 2022. 3. 31. [H2] H2 데이터베이스 의존성 추가 시 버전 주의하기 https://www.h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp www.h2database.com H2 데이터베이스를 연습용 디비로 많이 사용한다 의존성을 추가 해줄 때 다운로드 받은 버전과 동일한 버전으로 추가해주도록 .. 2022. 3. 31. 이전 1 2 3 4 5 6 7 8 ··· 21 다음