JPA >- Java Persistence API 자바 진영의 ORM 기술 표준 JPA는 표준 명세이다. >- JPA는 인터페이스의 모음 JPA 2.1 표준 명세를 구현한 3가지 구현체 하이버네이트, EclipseLink, DataNucleus ![](https:/
dialect >- JPA는 특정 데이터베이스에 종속되어있지 않다. 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 실제로 조금씩 다르다. ex) MySQL에서의 가변 문자는 VARCHAR 이지만, Orcale에서는 VARCHAR2 이다. dialect: SQL 표
JPQL JPQL에서 간단히 알아보자. >- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리 JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공 SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOI
JPA에서 중요한 점 2가지를 뽑는다면, >- 객체와 관계형 데이터 베이스 매핑하기 영속성 컨텍스트 위 두 가지가 존재한다. 여기서 영속성 컨텍스트에 대해 좀 기록하려고 한다. 영속성 컨텍스트 > 영속성 컨텍스트는 JPA를 이해하는데 중요한 용어이다. "엔티티를
flush >영속성 컨텍스트의 변경 내용을 데이터베이스에 반영 flush 발생 변경 감지가 발생했을 때 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 영속성 컨텍스트를 flush하는 방법 em.flush() /
엔티티 매핑 >- 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne,@JoinColumn @Entity >- @Entity가 붙은 클래스는 JPA가 관리하고 Entity라
매핑 어노테이션 정리 @Column : 컬럼 매핑 @Temporal : 날짜 타입 매핑 @Enumerated : enum 타입 매핑 @Lob : BLOB, CLOB 매핑 @Transient : 매핑 무시(특정 필드를 컬럼에 매핑 하지 않음) @Column name
기본키 매핑 >- @Id @GeneratedValue @Id >ID를 직접 만들어서 할당하는 것 근데 보통 관계형 데이터베이스를 사용하면 잘 안 쓴다. @GeneratedValue >자동 생성(@GeneratedValue) >- IDENTITY: 데이터베이
다중성단방향, 양방향연관관계의 주인다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany \*\* 실무에서 사용 X테이블은 외래 키 하나로 양쪽 조인 가능 그래서 방향이라는 개념이 없음객체는 참조용 필드가 있는
프록시 프록시 기초 >- em.find() vs em.getReference() em.find()는 데이터베이스를 통해서 실제 엔티티 객체를 조회한다. em.getReference()는 데이터베이스 조회를 미루는 가짜(프록시)엔티티 객체를 조회한다. 프록시 특징
상속관계 매핑 >- 객체는 상속관계가 있는데 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을
@MappedSuperclass >예를 들어 private String name;과 같이 여러 클래스에서 공통적으로 사용할 속성을 한 클래스에서 묶어서 속성들 나열하고 그 클래스를 상속 받아서 사용하면 된다. 이 때, 상속되는 부모 클래스 어노테이션에 @MappedS
@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능ex) 회원의 키나 나이값이 변경되어도 식별자로 인식 가능int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고, 값만 있으므로 변경시 추적 불가능ex
JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리 하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.JPQL은 SQL을 추상화 해서 특정 데이터베이스 SQL에 의존하지 않는다.JPQL은 결국 SQL로 변환된다.엔티티와 속성은 대소문자 구분(Member,a
컬렉션은 필드에서 바로 초기화 하는 것이 안전하다.1\. null 문제에서 안전하다.2\. 하이버네이트는 엔티티를 영속화 할 때, 컬랙션을 감싸서 하이버네이트가 제공하는 내장 컬렉션으로 변경한다.만약 getOrders() 처럼 임의의 메서드에서 컬력션을 잘못 생성하면
JPA에서 준영속 엔티티는 영속성 컨텍스트에서 더 이상 관리하지 않는 엔티티를 뜻한다.이런 준영속 엔티티를 변경하는 방법은 JPA에서 2가지가 있는데,변경감지와 병합이 있다.데이터베이스에서 내가 찾고자 하는 엔티티를 조회해서, 해당 엔티티를 수정하고 트랜잭션 커밋 시점