no image
고급 매핑
상속관계매핑(객체의 상속관계를 어떻게 DB에 매핑하는지) 원래 관계형 DB는 상속관계라는것이 없다. 대신 이와 유사하게 슈퍼타입-서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이란 (객체의 상속구조) - (Db의 슈퍼타입-서브타입 관계)를 매핑 슈퍼타입-서브타입 논리모델을 실제 물리모델로 구현하는 방법은 총 3가지가 있다. 1. 각 테이블로 변환 -> join전략 오른쪽에 DB를 보면 ITEM_ID를 통해 Join을통해 필요하면 조회하는 방식. 이런방식은 item,(album/movie/book) 에 insert를 각가해줘야하고 ITEM_ID라는 개인키를통해 join 해서 조회를 한다. item이 앨범인지 북인지 영화인지 구분하기위해 DTYPE을 통해 구분한다. 장점: - 테이블이 ..
2024.01.03
no image
다양한 연관관계 매핑
연관관계 매핑시 고려사항 3가지 1. 다중성 다대일 [N:1] @ManyToOne 일대다 [1:N] @OneToMany 일대일 [1:1] @OneToOne 다대다 [N:M] @ManyToMany (실무에선 거의 쓰면안된다.) 2.단방향,양방향 테이블: 외래키 하나로 양쪽 조인가능 객체: 참조용 필드가 있는쪽만 참조 가능. 그래서 단방향이므로 양쪽으로 서로 참조하려면 두개의 단방향으로 보면된다. 3.연관관계 주인 주인은 외래키의 정보를 관리한다. 주인이 아닌곳은 외래키 영향 주지않고 읽기만 가능. 이제 다중성에서 연관관계 종류에대해 알아보겠습니다. 다대일[N:1] N:1 단방향일떄 DB설계시 다(N) 쪽에 외래키를 만들어두게 설계를 해야한다. 외래키있는곳을 기준으로 객체도 Team을 참조하게 만들어두자. ..
2024.01.03
no image
연관관계 매핑 기초
목표 : 객체와 테이블 연관관계 차이 이해 객체의 참조와 테이블의 외래키를 매핑 방향: 단방향, 양방향 다중성: 1:1, 1:N, N:N, N:1 이해 연관관계 주인: 객체 양방향 연관관계는 관리 주인이 필요. 목차 연관관계가 필요한 이유 단방향 연관관계 양방향 연관관계와 연관관계주인 실전예제 2. 연관관계 매핑 시작. - 연관관계가 없는 경우. 테이블에 맞추어 객체를 모델링하면 협력관계 만들수없다. 테이블은 외래키로 join해서 연관된 테이블 찾는다. 객체는 참조를 통해 연관된 객체 찾는다. 이런 차이떄문에 불편! 그래서 설계할떄 단방향 연관관계로 설계해야해. Member findMember = em.find(Member.class, member.getId()); Team findTeam = findM..
2024.01.03
no image
엔티티 매핑
목차 - 객체와 테이블 매핑 : @Entity, @Table - DB 스키마 자동 생성 - 필드와 컬럼 매핑 : @Column - 기본키 매핑: @ID - 연관관계 매핑: @ManyToOne, @JoinColumn - 실전예제 - 1. 요구사항분석과 기본 매핑. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 객체. JPA를 사용해서 DB테이블과 매핑하는 어노테이션이며 필수이다. 주의 - 기본 생성자 필수(파라미터 없는 public, protected) - final, enum, interface, inner클래스 사용X - 저장할 필드에 final 사용 X @Entity(name = "Member") // 이처럼 JPA에서 사용할 엔티티 이름을 저장. // 클래스명이 기본값. @Table..
2024.01.02
no image
JPA 영속성 컨텍스트
JPA에서 가장중요한건 2가지 - 객체와 관계형 DB 매핑 - 영속성 컨텍스트(JPA 내부동작이 영속성 컨텍스트와 연관되있다.) 영속성 컨텍스트란? - 논리적인 개념으로 눈에 보이지않는다. - Enitity를 영구 저장하는 환경. - em.persist(entity); DB에 저장한다보단 영속성 컨텍스트라는곳에 저장한다. - Entity Manager를 통해 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 - 비영속(new): 영속성 컨텍스트와 전혀상관없는 새로운 상태 // 객체만 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); - 영속: 영속성 컨텍스트에 관리되는 상태 EntityMan..
2023.12.27
no image
JPA 구동방식
JPA는 persistence라는 클래스가 있는데 먼저 설정정보를 조회에서 EntityManagerFactory라는 클래스를 만든다. 이떄 필요할떄 EntityManager라는 객체를 만들어 사용한다. 주의할점은 - EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유한다. - EntityManager는 쓰레드간에 공유X(사용하고 버려야한다.) - JPA의 모든데이터 변경은 트랜잭션 안에서 실행해야한다. JPQL 소개 가장 단순한 조회방법 : em.find(), 객체그래프탐색(findmember.getId()) 하지만 나이가 18살 이상인 회원을 모두 검색한다면? JPQL을 사용! 페이징 할떄 유용하다. JPA를 사용하면Entiry 객체를 중심으로 개발 문제는 검색 쿼리인데 ..
2023.12.27