JPA를 사용해서 간단한 회원 CRUD를 실습해보려고합니다먼저 회원객체를 생성하고 DB의 테이블과 매핑하도록 하겠습니다. 아래와 같이 Member테이블 생성 쿼리를 날려 DB에 테이블을 생성한뒤 Member라는 java class를 생성해서 방금 만든 테이블과 매핑해줍
✨영속성 컨텍스트✨ 는 엔티티를 영구적으로 저장하는 환경이며 논리적인 개념입니다. 접근은 Entitymanager를 통해가능하며 DB로 가기전에 있는 가상공간이라고 생각하며 됩니다.엔티티의 생명주기엔티티의 생명주기는 그림으로 나타내면 아래와 같습니다.하나씩 먼저 살펴보
flush는 영속성 컨텍스트의 변경내용을 DB에 반영하는 것입니다. 크게 3가지 방법으로 flush를 할 수 있습니다. 이는 원하는 곳에서 flush를 하는 것으로 아래의 코드를 실행하면 변경사항이 flush때 DB에 반영되기 때문에 ========== 위쪽으로 수정쿼
Entity 매핑 > 객체와 테이블 매핑 @Entity가 붙은 클래스를 JPA가 entity로 관리합니다. 그리고 꼭 파라미터가 없는 생성자가 필수로 있어야합니다. 그리고 클래스를 다른 테이블과 매핑하고싶다면 @Table안에 name속성에 적어주면 됩니다. 또 UN
기본키 매핑방식은 크게 직접 할당과 자동할당이 있습니다. 직접할당(권장x)@Id 사용해서 직접 id를 할당해줄 수 있습니다. 자동할당@GeneratedValue를 사용하면 자동할당을 해줍니다. 전략은 크게 3가지가 있습니다.기본 키 생성을 데이터베이스에 위임하는 것입니
객체를 테이블에 맞춰 모델링만약 객체를 테이블과 똑같이 모델링 하면 어떻게 될까요? 데이터베이스에는 아래와 같이 team과 member가 1대다 연관관계를 갖으면서 member쪽에 team_id가 foreign key로 등록이 됩니다. Member모델에 teamId를
지금까지 단방향 매핑을 했다면 이번에는 반대로 team.members와 같이 팀의 Member들을 역참조할 수 있도록 해서 양방향 객체 연관관계를 만들어보겠습니다.Team에 members리스트를 추가해줍니다 그리고 team의 입장에서 @OneToMany 어노테이션을 붙
관계형 데이터 베이스는 상속 관계가 없습니다. 하지만 상속관계와 유사한 모델링 기법인 슈퍼타입과 서브타입이 있습니다. 슈퍼타입은 서브타입들의 공통적인 필드들을 뽑아내어 만들고 서브타입은 슈퍼타입보다는 구체적입니다. 아래 그림의 왼쪽이 DB에서의 슈퍼,서브타입개념이며 오
프록시 em.find()를 하면 DB나 영속성 컨텍스트 안에서 해당 엔티티 객체를 찾아 반환합니다. 이와 다르게 em.getReference()를 하면 데이터 베이스 조회를 미루는 프록시 엔티티 객체를 반환합니다. (이때 영속성 컨텍스트에 캐시 안에 해당 객체가 있다
앞에서 익힌 프록시라는 개념을 떠올리며 지연로딩과 즉시로딩을 이해해보도록 하겠습니다 :)예를들어 Team과 Member가 일대다로 연관관계를 갖고있을 때 Member를 조회할 때 마다 해당 Member의 Team도 조회해야할까요? 비즈니스적 니즈에 따라 그럴수도 아닐
영속성 전이 영속성 전이는 특정 엔티티와 같이 영속화, 삭제.. 이 이뤄지도록 하는 것입니다. 이는 특히 연관관계인 두 엔티티사이에서 같이 쓰면 편리합니다. 하나만 영속화 해줘도 연관관계의 엔티티도 같이 자동으로 영속화 되기때문입니다. 아래와 같이 Parent와 C
엔티티 타입 vs 값 타입엔티티 타입은 이제까지 @Entity를 붙여서 관리하던 클래스들입니다. 이 타입들은 pk값으로 관리가 되기때문에 데이터가 변해도 쉽게 추적이 가능하고 관리도 편리합니다. 그에비해 갑타입은 int, String과 같은 단순히 값으로 사용하는 자바
값 타입 컬렉션을 값타입을 여러 개 저장해야할 때 사용합니다. 예를 들어 앞서 봤던 예제에서 Member마다 Period를 여러개 저장해야한다던가 여러 Address를 가지는 경우입니다.만약 Member마다 여러개의 선호 음식을 갖는다고 하면 다음과 같이 만들어 줄 수
JPQL 기본문법 이제까지 단순히 특정 pk값의 객체를 조회할 때 em.find()를 사용해왔습니다. 하지만 만약 조건이 더 복잡한 조회를 해야한다면 JPQL을 사용해야합니다! JPQL은 객체지향적으로 쿼리문을 작성할 수 있게 도와는 JPA가 제공하는 객체 지향 쿼리
스프링에서 유저가 DB에 있는 데이터를 이용해야하는 요청을 보낼 때 어떤 일이 일어나는지 정리해보겠습니다!JDBC는 데이터를 다루는 것을 도와주는 자바 표준 인터페이스입니다. 그리고 JDBC의 구현체로 각 DBMS에 맞는 Driver가 있습니다. 따라서 프로그램을 할때
객체를 조회시에 연관된 객체들까지 모두 N+1문제없이 가져오기위해 자주 쓰이는 Fetch Join + LAZY의 조합 너무 습관적으로 쓰다보니 어느샌가 왜 이렇게 쓰는지 헷갈리기 시작하더라고요... 그래서 제대로 정리해보기로 했습니다모든 예제에서는 user, folde
spring data jpa와 mysql을 함께 사용하면서 spring boot에서 해줘야할 설정들을 살펴보면서 spring이 데이터베이스에 어떻게 접근하는지에 대해서도 살펴보려고합니다. (항상 설정이 제일 귀찮고 어려운 것 같아요..🥲)설정은 여러가지 방법들로 할