객체-관계 매핑Object : 객체(자바)Relational : DB 백엔드 개발자가 비즈니스 로직 개발보다 SQL 작성에 더 많은 노력을 들여야한다.SQL 작성이 단순하고 반복적인데 실수하기는 쉽다.웹 서버 개발 언어와 관계형 데이터베이스 언어의 목적 및 사용 방법
https://woowacourse.github.io/javable/post/2020-08-31-dto-vs-entity/양방향 연관관계에서 엔티티를 직접 리턴하면 무한루프에 빠지게됨 \-> 둘 중에 하나 @JsonIgnore해줘야 함. 엔티티 바뀌면 api스
객체 ------ORM------- RDB객체는 객체대로 설계관계형 데이터베이스는 관계형 데이터베이스대로 설계ORM 프레임워크가 중간에서 매핑JPA는 애플리케이션과 JDBC 사이에서 동작1차 캐시와 동일성 보장같은 트랜잭션 안에서는 같은 엔티티를 반환트랜잭션을 지원하는
JPA를 이해하는데 가장 중요한 용어'엔티티를 영구 저장하는 환경'이라는 뜻논리적인 개념으로 눈에 보이지 않는다.엔티티 매니저를 통해 영속성 컨텍스트에 접근persist를 하면 영속성 컨텍스트에 쌓이고 commit을 해야 비로소 DB에 저장된다.1차 캐시동일한 트랜잭션
객체와 테이블 매핑: @Entity, @Table필드와 컬럼 매핑 : @Column기본 키 매핑 : @Id연관관계 매핑 : @ManyToOne, @JoinColumn@Entity가 붙은 클래스는 JPA가 관리하는 엔티티.따라서 JPA를 사용해서 테이블로 매핑할 클래스는
현재 방식은 객체 설계를 테이블 설계에 맞춘 방식테이블의 외래키를 객체에 그대로 가져옴객체 그래프 탐색이 불가능참조가 없으므로 UML도 잘못됨
다중성다대일, 일대다, 일대일, 다대다단방향, 양방향테이블외래 키 하나로 양쪽 조인 가능방향이라는 개념이 없음객체참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조하면 단방향양쪽이 서로 참조하면 양방향연관관계의 주인테이블은 외래키 하나로 두 테이블이 연관관계를 맺음객체
fetch = FetchType.LAZY지연 로딩 LAZY를 사용해서 프록시로 조회fetch = FetchType.EAGER즉시 로딩 EAGER를 사용해서 함께 조회가급적 지연 로딩만 사용(특히 실무에서)즉시 로딩을 적용하면 예상하지 못한 SQL이 발생즉시 로딩은 JP
JPA는 페이징을 다음 두 API로 추상화setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작)setMaxResults(int maxResult) : 조회할 데이터 수객체 중심적내부 조인 : INNER \* 데이터 없으면 안나옴
실무에서 매우매우 중요함SQL 조인 종류 xJPQL에서 성능 최적화를 위해 제공하는 기능연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능join fetch 명령어 사용페치 조인 = LEFT JOIN FETCH 조인경로회원을 조회하면서 연관된 팀도 함께 조회(
컬렉션을 페치 조인하면 페이징이 불가능하다. \* 컬렉션을 페치 조인하면 일대다 조인이 발생하므로 데이터가 예측할 수 없이 증가한다.일대다에서 일을 기준으로 페이징을 하는 것이 목적인데 데이터는 다를 기준으로 row가 생성된다.이 경우 하이버네이트는 경고 로그를 남기
하위 엔티티들을 첫 쿼리 실행 시 한 번에 가져오지 않고, 지연 로딩으로 필요한 곳에서 사용되어 쿼리가 실행될 때 발생하는 문제.ex) board-comment 에서 board가 10개 있다고 할 때,board전체를 조회하는 쿼리 1 + board가 각각의 commen
JDBC api와 Java application 사이에서 매개하는 역할.java application을 sql구조를 생각하지 않고 평소 프로그래밍 하는 방식으로 db데이터에 접근할 수 있도록 함sql문을 직접 java application내에서 적을 경우가 적어진다.s