JPA 4

객체지향 모델과 관계형 모델의 패러다임의 불일치

'The Object-Relational Impedance Mismatch'는 객체 모델을 관계형 모델에 저장할 때 발생하는 문제, 즉 패러다임의 불일치에서 오는 문제를 말한다. 이 문제를 해결하는 게 ORM의 과제다. Persistence Persistence란 애플리케이션의 데이터가 애플리케이션 프로세스 범위를 넘어서 지속되는 것을 말한다. Java용어로 치자면 객체의 상태거 JVM범위를 넘어서 유지되는 것이라고 생각하면 된다. 객체 모델 & 관계형 모델 RDBMS는 데이터를 테이블 형식으로 표현한다. 반면 자바 같은 객체지향 모델은 객체 그래프로 데이터를 표현한다. 따라서 객체를 테이블 형식으로 저장하면 다섯 가지 불일치 문제가 발생한다. 1.세분성(Granularity) 데이터베이스의 테이블 수보..

JPA 2021.04.26

[JPA] 연관관계를 가진 엔티티 save 하기

연관관계를 가진 엔티티 save 하기 insert하려는 테이블이 여러 테이블과 연관관계를 가지고 있을 때 어떻게 해야 할까? Recipe를 추가할 때, 재료는 Ingredient에, 요리 과정은 CookingMethod 테이블에 보관해야 한다. 유형이나 분류는 이미 정해져있는 것을 가져다 사용하면 되므로 제외했다. 프로세스를 짜보자. 사용자 입장에서. 등록하려는 레시피가 어떤 유형인지 선택한다. 등록하려는 레시피가 어떤 분류인지 선택한다. 요리 이름 완성된 요리 썸네일 삽입 간략한 설명 재료를 입력.(여러 개) 요리 과정 입력.(여러 개) 요리 과정 이미지 삽입(여러 개) 이렇게 입력하고 등록했을 때 서버에서 일어나는 일은 입력 받은 데이터를 분류한다. Ingredient를 등록한다. CookingMet..

JPA 2021.01.16

[JPA] @EntityGraph를 OnetoMany에 적용 시 페이징 처리 안 되는 이슈

문제 @Entity public class Recipe { ... @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, fetch = FetchType.LAZY) Set ingredients = new HashSet(); @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @OrderBy("sequence ASC") Set cookingMethods = new HashSet(); @ManyToOne(fetch = FetchType.LAZY) private FoodNation foodNation; //한중일양식 @ManyToOne(fetch = FetchTyp..

JPA 2021.01.14

JPA 연관관계 매핑

다양한 연관관계 매핑 연관관계 매핑할 때 고려해야 할 세 가지가 있다. 다중성 먼저 연관이 있는 두 테이블의 관계를 파악해야 한다. 1:1관계인지 1:N관계인지, 다중성을 고려해야 한다. 방향 두 엔티티 중 한쪽만 참조하는 단방향인지, 양쪽 모두 참조하는 양방향인지 고려해야 한다. 연관관계 주인 단방향 관계라면 관계를 설정하는 쪽이 주인이 된다. 하지만 양방향이라면 관계의 주인을 정해야 한다. 보통 '다(N)'가 되는 쪽이 외래 키를 가지고 있기 때문에 연관관계의 주인이 된다. 다중성 연관관계가 가진 다중성 다대일(N:1) @ManyToOne 일대다(1:N) @OneToMany 일대일(1:1) OneToOne 다대다(N:N)@ManyToMany 다중성을 판단하기 어려울 때는 반대방향을 생각하면 된다. 일..

JPA 2020.11.14