Web/JPA

    EP6. 연관관계 매핑 (실전예제)

    테이블 구조 객체 구조 Member에서 orders 가 있는것이 객체지향적으로 좋은 설계는 아니다. 잘못된 설계이다. 회원의 주문목록을 보기위해서 상식상 멤버에 orders가 있어야된다고 생각이 되지만, Order의 Member를 이용해도 충분히 가능하다. 애플리케이션을 개발할때는 최대한 단방향 매핑으로 끝내자. 양방향이 필요한 경우 : 비즈니스 상에서 Order를 볼때 OrderItem까지 한번에 같이 보고싶은 경우 양방향 연관관계를 걸어준 객체 코드 Member ... @OneToMany(mappedBy = "MEMBER_ID") private List orders = new ArrayList(); ... Order ... @OneToMany(mappedBy = "ORDER_ID") private L..

    EP5. 연관관계 매핑

    예제로 연관관계 매핑 해보기 단방향 연관관계 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체지향 모델링 Member class 의 teamId는 멤버가 어느 팀에 속해있는지 알려주는 변수이다. teamId는 테이블에서 FK에 해당된다. 그리고 Table 에서는 Member 와 TEAM 이 다대일 관계라는 것을 표현한다. 모델링코드 package hellojpa; import javax.persistence.*; import java.math.BigDecimal; import java.util.Date; @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") privat..

    EP4. 요구사항 분석과 기본 매핑

    실전 예제로 요구사항 분석과 기본 엔티티 매핑을 해보았다. 기본 엔티티 매핑을 위한 도메인 모델 회원은 여러번 주문할 수 있다. -> 일 대 다 주문할때 여러 상품을 선택할 수 있다. -> 일 대 다 같은 상품이 여러번 주문될 수 있다. -> 다 대 일 테이블 설계 엔티티 설계 엔티티 클래스 코드 Member package jpabook.jpashop.domain; import javax.persistence.*; @Entity @Table() public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; private String city; private String str..

    EP3. 영속성 컨텍스트, 엔티티 매핑

    em.flush(); 를 하면 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 한다. (sql저장소에 있던 sql문들이 db로 날아간다.) 영속성 컨텍스트를 비우는 것은 아님! 커밋을 실행하면 : flush()를 자동호출한다. ( = 쿼리가 db로 날아간다 ) JPQL을 실행하면 : flush()를 자동호출한다. ( = 쿼리가 db로 날아간다 ) 준영속 상태 : 한번 영속상태였다가 비영속상태가 되었을 때. 영속 -> 준영속 em.detach() : 특정 엔티티만 준영속 상태로 전환 em.clear() : 영속성 컨텍스트를 완전히 초기화 em.close() : 영속성 컨텍스트를 종료 영속성 컨텍스트의 이점 1차 캐시 동일성 보장 쓰기 지연 변경감지 지연로딩 엔티티 매핑 객체 : @Entity 테이블 : ..

    EP2. JPA 기본동작과정과 내부동작방식

    JPA 기본 동작 과정 Entity Manager Factory 에서 Entity Manager 를 만들고 Transaction 안에서 Entity Manager를 이용해 객체와 테이블을 매핑, 수정, 삭제를 할 수 있다. 객체 수정시에 member.setId(1L); 을 해주고 em.persist(member); 를 해주지 않아도 수정해준다.! JPA 내부 동작 방식 JPA에서 가장 중요한 2가지 1. 객체와 RDB 매핑 (ORM) 2. 영속성 컨텍스트 (내부 동작) 영속성 컨텍스트 : entity manager에 등록 (정확히는 아니지만 지금은 이렇게 이해해도 괜찮다고 한다.) em.persist(entity); 를 해주면 바로 sql이 날아가는 것이 아닌 영속성 컨텍스트에 그냥 등록만 된다. sql..

    EP1. JPA 개념과 개발환경 세팅

    요즘 시대는 객체지향프로그래밍과 관계형데이터베이스가 대부분이다. 그래서 아래 2가지 문제가 생긴다. 1. SQL 의존적인 문제 2. 객체 vs 관계형 DB 의 패러다임 불일치 ( 객체 -> SQL, SQL -> 객체 무한변환..) 객체와 관계형 데이터베이스의 차이 객체 데이터베이스 상속 있음 없음 연관관계 참조를 통해 가져오기 가능 join을 통해 가져와야함 데이터베이스와의 연동을 객체지향프로그래밍 원리에 맞추려고 하면 할 수록 자바의 객체와 SQL의 객체의 차이때문에 더 복잡해지기 시작했다. 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까? -> JPA 등장 JPA : Java Persistence API 자바 진영의 ORM 기술 표준 ORM : Object-Relational Mapprin..