본문 바로가기

Spring/JPA8

[JPA] 변경 감지와 병합(merge) ,데이터수정 변경감지와 병합의 차이는 정말 중요한 내용이므로 꼭 이해해야한다. 준영속 엔티티? 영속성 컨텍스트가 더 이상 관리하지 않는 엔티티를 말한다. (Book 객체는 이미 DB에 한번 저장되어서 식별자가 존재한다. 이렇게 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속엔티티라고 볼 수 있다.) Book book = new Book(); book.setId(form.getId()); book.setName(form.getName()); book.setPrice(form.getPrice()); book.setStockQuantity(form.getStockQuantity()); book.setAuthor(form.getAuthor()); book.setIsbn(form.getIsbn()); 준영속의 문.. 2021. 3. 22.
[JPA] 상속관계 매핑 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼 타입, 서브 타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입, 서브타입관계를 매핑한다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 (ITEM, ALBUN, MOVIE, BOOK 테이블을 만들고 ITEM에 구분 컬럼을 두고ITEM_ID로 조인) (insert 2번) 통합 테이블로 변환 -> 단일 테이블로 (앨범, 무비, 북 모든 컬럼을 ITEM테이블에 넣고 타입으로 구분) 서브타입 테이블로 변환 -> (구현클래스마다) 앨범, 무비, 북 테이블을 각각 만드는 방식 JPA는 이 세가지 모두 지원해준다. JPA의 기본 전략 @Entity .. 2021. 3. 8.
[JPA] 다양한 연관 관계 매핑 다대일, 일대다, 일대일, 다대다 연관관계 매핑 시 고려사항 3가지 다중성 (DB랑 맵핑하기위함) 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany = 실무에서 쓰면 안됨. 단방향, 양방향 연관관계의 주인 단방향, 양방향 테이블 외래키하나로 양쪽 조인 가능 사실 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조가 가능하다 한쪽만 참조하면 단방향이다 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A->B, B->A 처럼 참조가 2개이다. 객체 양방향 관계는 참조가 2군데 있다. 둘 중 테이블의 외래키를 관리할 곳을 정해야한다. 연관관계의 주인 : .. 2021. 3. 7.
[JPA] *중요* 양방향 연관관계와 연관관계의 주인 객체는 참조를 활용하고 테이블은 외래키를 사용한다. 이 두 개 사이에서 오는 차이를 알아야한다. 1. 양방향 연관관계 양쪽에서 서로 참조할 수 있는 것이다. 테이블 연관관계는 양방향이든 단방향이든 차이가 없다. 테이블의 연관관계는 사실상 외래키 하나로 양방향이 가능하다. 외래키만 있으면 다 알 수 있기 때문이다. 문제는 객체에서 나온다. 양쪽으로 참조하기위해서는 Team에 member LIst가 있어야한다. //Team.class 파일의 부분 코드 private Long id; private String name; @OneToMany(mappedBy = "team") //Team에서 Member로 가는건 일대다 + private List members = new ArrayList(); // 관례로 Arr.. 2021. 3. 7.
[JPA] 연관관계 매핑 - 단방향 연관관계 ( 객체지향적으로 설계하는 방법 ) 데이터 중심 설계의 문제점 위 엔티티 설계대로 Domain class를 작성하면 Order클래스에 private Long memberId; 로 작성하게 된다. 현재 방식은 객체 설계를 테이블 설계에 맞춘 방식이다. 테이블의 외래키를 객체에 그대로 가져왔다. 객체 그래프 탐색이 불가능하다 참조가 없으므로 UML도 잘못되었다. 위에 쓴대로 사용한다면 주문한 회원정보를 찾아야할때 아래 코드로 찾아야한다. Order order = em.find(Order.class, 101L); Long memberId = order.getMemberId(); Member member = em.find(Member.class, memberId); 이건 조금 객체지향적이지 않은 방법이고 객체를 관계형DB에 맞춘거라고 할 수 있다.. 2021. 3. 6.
[JPA] 아주 간단한 쇼핑몰 만들기 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원기능 회원등록 회원조회 상품기능 상품등록 상품수정 상품조회 주문기능 상품주문 주문내역조회 주문취소 도메인 모델 분석 회원과 주문의 관계 (일대다) : 회원은 여러번 주문할 수 있다. 주문과 상품의 관계 : 주문할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러 번 주문될 수 있다. 주문 상품이라는 모델을 만들어 다대다 관계를 일다대, 다대일 관계로 풀어낸다. 테이블설계 엔티티 설계와 매핑 데이터 중심 설계의 문제점 위 엔티티 설계대로 Domain class를 작성하면 Order클래스에 private Long memberId; 로 작성하게 된다. 현재 방식은 객체 설계를 테이블 설계에 맞춘.. 2021. 3. 6.