본문 바로가기

ORM/JPA12

[JPA] 값 타입 정리 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 기본값 타입 임베디드 타입 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 🥹서론 JPA에서 데이터 타입은 크게 두가지로 나뉘어진다. 1) 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 학생 엔티티의 나이 값을 변경해도 식별자로 인식 가능 2) 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입은 기본값 타입(int, double), 임베디드 타입, 컬렉션값 타입으로 나뉘어진다. 이 중 우리는 2)값.. 2023. 4. 26.
[JPA] 프록시와 연관관계 관리 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 프록시 즉시 로딩과 지연 로딩 영속성 전이(CASCADE)와 고아 객체 1. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 연관 관계의 엔티티는 비즈니스 로직에 따라 사용될 때도 있지만 그렇지 않을 때도 있다. JPA는 이러한 문제를 해결하려고 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데, 이것을 지연로딩이라고 한다. 그런데 지연로딩 기능을 사용하려면 실제 엔티티 객체 대상에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데, 이것을 프록시 객체라고 한다. em.find() vs em.getReference() em.find() : 데이터베이스를 통해서 실.. 2023. 4. 24.
[JPA] 다양한 연관관계 매핑 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:M] 1. 다대일 [N:1] 객체 양방향 관계에서 연관 관계의 주인은 항상 다(N)쪽이다. 예를 들어, 회원(N)과 팀(1)이 있다고 할 떄, 회원 쪽이 연관 관계의 주인이 된다. [다대일 단방향 매핑] - 가장 많이 사용하는 연관 관계 [다대일 양방향 매핑] 양방향은 외래 키가 있는 쪽이 연관 관계의 주인이다. 일대다와 다대일 연관 관계는 항상 다(N)에 외래키가 있다. 여기서는 다(N)인 MEMBER 테이블이 외래키를 갖고 있으므로, Member.team이 연관 관계의 주인이다. 양방향 연관 관계는 항상 서로를 참조해야 한다. 따라서, 편의를 위해 연.. 2023. 4. 24.
[JPA] 연관관계 매핑 기초 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 연관 관계가 필요한 이유 단방향 연관 관계 양방향 연관 관계와 연관 관계의 주인 양방향 매핑 시 많이 하는 실수 ★★ 1. 연관 관계가 필요한 이유 “객체 지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.” by 객체지향의 사실과 오해 [객체를 테이블에 맞추어 모델링] 객체를 테이블에 맞추어 데이터를 중심으로 모델링을 하게 되면, 위 사진과 같이 member에서 team을 set하는 과정에서 team의 id값만을 가지게 되므로, team 자체에 대한 관계를 매핑할 수 없게 된다. 따라서 이 방법으로는 객체 간의 협력 관계를 만들 수 없다. 2. 단방향 연관 관계 따라서 위의 예제에서 team.getId.. 2023. 4. 24.
[JPA] 엔티티 매핑 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 객체와 테이블 매핑 필드와 컬럼 매핑 기본 키 매핑 1. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 붙여야 한다. 기본 생성자는 필수다. 저장할 필드에 final을 사용하면 안된다. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 2. 필드와 컬럼 매핑 @Column 옵션 설명 name 필드와 매핑할 테이블의 컬럼 이름 insertable, updatable 등록, 변경 가능 여부 nullable null값 허용 여부 unique @Table의 uniq.. 2023. 4. 24.
[JPA] OSIV 성능 최적화 정리 [김영한님의 실전! 스프링 부트와 JPA 활용2 강의 학습 후 정리한 내용입니다.] OSIV란? OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. JPA에서는 OEIV(Open EntityManager In View), Hibernate에서는 OSIV(Open Session In View)라고 하는데, 관례상 둘 다 OSIV라고 부른다. 개발자는 OSIV를 임의로 켜거나 끌 수 있기 때문에 서비스 특성에 맞게 OSIV 전략을 활용할 필요가 있다. 아래에서 자세히 알아보자. OSIV on spring.jpa.open-in-view : true (기본값) 영속성 컨테이너를 뷰까지 열어두게 되면 트랜잭션이 끝나는 컨트롤러 계층에서도 지연 로딩(Lazy Loading.. 2023. 4. 18.