중복되는 SQL과 코드작성의 무한 반복SQL에 의존적인 개발진정한 의미의 계층 분할이 어렵다.엔티티를 신뢰할 수 없다.상속객체는 상속관계가 있지만, 관계형 데이터베이스는 상속 관계가 없다.연관관계객체는 reference(참조)를 가지고 있다.
엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다.개발자 입장에서 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다.엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장인데, 비용 문제 때문에 애플리케이션 전체에
영속성 컨텍스트는 내부에 캐시를 가지고 있는데 이를 1차 캐시라고 한다. 영속 상태의 엔티티는 모두 이곳에 저장된다. 다음 그림과 같이 영속성 컨텍스트 내부에 키는 @Id로 매핑한 식별자, 값은 엔티티 인스턴스인 Map이 있다.📌 참고일반적으로 트랜잭션을 시작하고 종
@Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 이 어노테이션이 필수이다.주의 사항기본 생성자는 필수(파라미터가 없는 public 또는 protected 생성자)final 클래스, enum, inter
객체와 테이블 연관관계의 차이를 이해해야 한다. 객체의 참조와 테이블의 외래키를 매핑하는 것이 이 장의 목표이다.
다대일: @ManyToOne일대다: @OneToMany일대일: @OneToOne다대다: @ManyToMany테이블외래키 하나로 양쪽 조인 가능. 사실 방향이라는 개념이 없다.객체참조용 필드가 있는 쪽으로만 참조 가능. 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방
관계형 데이터베이스에는 상속관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 상속관계 매핑: 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다.
엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 예를 들어, Member를 조회할 때 Team도 함께 조회해야 할까? printUserAndTeam는 memberId로 회원 엔티티를 찾아 회원, 회원과 연관된 팀의 이름도 출력한다.
@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불
JPQL(Java Persistence Query Language)
경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 경로 표현식 용어 정리 상태 필드(state field): 단순히 값을 저장하기 위한 필드 (ex: m.username) 연관 필드(association field): 연관관계를 위한 필드 단일 값 연관 필드