1. 밀도문제는 데이터베이스의 데이터가 더 정형화되어있고 까다롭다
2. 관계형 데이터 베이스에는 상속의 개념이 x.
하지만 우리가 이미 배웠던 것처럼 상속은 객체의 역할과 구현을 분리해주기 위해 객체 지향 프로그래밍에서 가장 핵심적인 기능 중 하나.
이러한 패러다임 불일치에서 기인한 문제들과, 반복적이고 번거로운 어플리케이션 단에서의 쿼리 작업을 줄여주기 위해 ORM(객체 관계 매핑)기술들이 등장.
특히 JPA(Java Persistence API: 자바 ORM 기술에 대한 표준 명세)는
1. 쿼리를 자동으로 만들어준다.
2. 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 매우 단축된다.
3. 패러다임의 불일치를 해결.
4. 특정한 상황을 제외하고는 성능도 챙김. 최적화를위한 노력
5. 방언도 지원. 관계형 db이자 표준을 준수한 sql을 지원한다면, jpa가 방언들도 알아서 처리.
자바는 객체와 레퍼런스로, 데이터베이스는 테이블사이의 관계(FK)로 정보 사이의 연관관계를 표현하고 처리.
두 방식의 차이를 해결하기 위해서는 JPA에는 "Java 어플리케이션 상에서", "데이터베이스의 연관관계"를 표현해주기 위한 장치를 가짐
JPA 연관관계 설정방법
데이터의 생성(created_at), 수정(last_modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용.
각각의 엔티티의 생성 수정 시간을 매번 작정하는건 매우 귀찮음.
그래서,
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
이 어노테이션을 사용해 객체를 생성.
extends Timestamped로 객체를 상속받으면, 자동으로 생성, 수정시간을 데이터베이스에 입력하고, 필요하면 해당값을 편하게 GET할 수 있다.
Spring Data JPA) 기본 제공해 주는 기능
ID 외의 필드에 대한 추가기능 -> interface만 선언해주면, 구현은 Spring Dat JPA가 대신.
Spring Data JPA 추가기능 구현방법은 공식문서에 명시
Spring Data JPA 공식문서
@Getter - 값을 가져올 때 씀
@NoArgsConstructor - 기본생성자 만들어줌
@OneToMany - ex) 음식 1개에 주문이 여러개