패러다임의 불일치

JAVA - 도메인 모델 중심으로 구조화 되어 있고, 객체지향적 사고를 요구한다. 모든 데이터를 인스턴스 형태로 저장하고 다루는 구조이다.

RDB - 데이터 중심으로 구조화 되어 있고, 집합적인 사고를 요구한다.

객체지향 프로그래밍에서 보편적으로 사용하는 추상화, 상속, 다형성 같은 개념은 RDB에 없다. 이렇게 객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현방법은 다르다. 이것을 어려운 말로? 패러다임의 불일치라고 한다. 따라서 객체 구조를 테이블 구조에 저장하는 데는 한계가 존재한다. 이러한 패더라임의 불일치를 해결하기 위해서 개발자가 중간에서 불필요하게? 작성해야하는 코드의 양이 너무나 방대하다.

그래서 이러한 문제를 JPA가 JAVA와 RDB 사이에서 이러한 문제들을 해결 해준다? 또는 변환작업을 도와서 불필요한 코드의 양을 줄여준다.

  1. 상속

    상속받은 Entity 클래스를 생성 후, 메서드를 호출하면 JPA가 알아서 부모 클래스와 자식 클래스의 INSERT문을 나눠서 실행시켜준다.

  2. 연관관계

    객체 간의 연관 관계와 테이블 간의 연관 관계는 차이점을 가진다.

    객체는 참조를 사용해서 다른 객체와 연관관계를 가지고 참조에 접근해서 연관된 객체를 조회할 수 있다. 객체의 참조는 단방향 참조이다.

    반면, 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회할 수 있다. 또한 참조 방향이 양방향이다.

4.4.5 Limiting Query Results

You can limit the results of query methods by using first or top keywords, which you can use interchangeably. You can append an optional numberic value to top or first to specify the maximum result size to be returned. If the number is left out, a result size of 1 is assumed. The following example show how to limit tho query size.

User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
List<User> findFirst10ByLastname(String lastname, Sort sort);
List<User> findTop10ByLastname(String lastname, Pageable pageable);