[JPA] 값 타입과 불변 객체 - 값 타입 (2)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입과 불변 객체▶ 문제: 값 타입 공유 참조임베디드 타입 같은 값 타입을 여러 Entity에서 공유하면 위험하다.Embedded 타입 같이 직접 정의한 값 타입은 객체 타입이기 때문에 값을 대입하면 참조 값이 공유된다.🔽 값 타입 공유 참조 문제 발생 코드Address address = new Address("city", "street", "zipcode");member1.setAddress(address);member2.setAddress(member1.getAddress()); //회원1의 address 값을 공유위 코드는 회원1이나 회원2가 이후 주소를 변경하면 함께 변경되기 때문에 문제가 생긴다. ▶..
[JPA] 기본값 타입과 임베디드 타입 - 값 타입 (1)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ JPA의 데이터 타입JPA의 데이터 타입을 크게 2가지로 나누면 엔티티 타입과 값 타입으로 나눌 수 있다.엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적이 가능하다.예: Member Entity의 키나 나이 값을 변경해도 식별자로 인식 가능하다.값 타입int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경 시 추적이 불가능하다.예: 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체된다.엔티티 타입의 특징값 타입의 특징식별자 O생명 주기 관리공유식별자X생명 주기를 엔티티에 의존공유하지 않는 것이 안전(복사해서 사..
[JPA] 영속성 전이(CASCADE)와 고아 객체
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 영속성 전이: CASCADE영속성 전이(transitive persistence): 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용한다.설정 방법: @OneToMany(mappedBy = "", cascade = CascadeType.PERSIST)예: 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 때 ▶ 영속성 전이: 저장🔽 영속성 전이 설정 코드@Entitypublic class Parent { @Id @GeneratedValue private Long id; //영속성 전이, CASCADE 옵션 적용 @OneToMany(mappedBy =..
[JPA] 즉시 로딩과 지연 로딩
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 즉시 로딩과 지연 로딩기능을 구현할 때 DB에서 가져오고 싶은 정보의 범위가 비즈니스 로직에 따라 다르다. 예를 들어, Member와 Team이라는 두 개의 entity가 연관 관계에 있을 때, 구현 목적에 따라 두 개의 데이터가 한 번에 조회되는 것이 좋을 수도 있고, 그렇지 않을 수도 있다. 이러한 상황을 JPA가 프록시와 지연 로딩을 통해 해결한다. 이전 글에서 프록시에 대해 알아보았고, 이 글에서는 지연 로딩에 대해 알아보겠다.JPA는 개발자가 연관된 Entity의 조회 시점을 선택할 수 있도록 다음 두 가지 방법을 제공한다.즉시 로딩지연 로딩  ✅ 즉시 로딩 (EAGER LOADING)Entity를 조회할..
[JPA] 프록시
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 프록시기능을 구현할 때 DB에서 가져오고 싶은 정보의 범위가 비즈니스 로직에 따라 다르다. 예를 들어, Member와 Team이라는 두 개의 entity가 연관관계상에 있을 때, 구현 목적에 따라 두 개의 데이터가 한 번에 조회되는 것이 좋을 수도 있고, 그렇지 않을 수도 있다. 이러한 상황을 JPA가 프록시와 지연로딩을 통해 해결한다. 이 글에서는 우선 프록시에 대해 알아보겠다. ▶ 프록시 기초1️⃣ em.find()DB를 통해 실제 Entity 객체를 조회하는 메서드member라는 객체를 사용하지 않고 find()만 해도 SELECT 쿼리를 실행한다.2️⃣ em.getReference()DB 조회를 미루는 가짜..
[JPA] 고급 매핑(상속관계 매핑) - 엔티티(Entity) 매핑 (7)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 상속 관계 매핑관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다.대신 관계형 데이터베이스에는 슈퍼타입 서브타입 관계라는 모델링 기법이 상속과 유사하다.ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다.슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현하는 3가지 방법조인 전략: 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다.단일 테이블 전략: 테이블을 하나만 사용해서 통합한다.구현 클래스마다 테이블 전략: 서브 타입마다 하나의 테이블을 만든다.  ✅ 조인 전략엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부..
[JPA] 다양한 연관관계 매핑 - 엔티티(Entity) 매핑 (6)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 다대일(@ManyToOne)다대일 관계의 반대 방향은 항상 일대다 관계이고, 일대다 관계의 반대 방향은 항상 다대일 관계이다. 데이터베이스 테이블의 일(1), 다(N) 관계에서 외래 키는 항상 다 쪽에 있다. 따라서 객체 양방향 관계에서 연관관계 주인은 항상 다 쪽이다. ▶ 다대일 단방향 [N:1]단방향은 한쪽만 참조가 가능하다.회원은 Member.team으로 팀 엔티티를 참조할 수 있지만 반대로 팀에는 회원을 조회하는 필드가 없다.🔽 다대일(@ManyToOne) 단방향 코드@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_..
[JPA] 단방향 연관관계와 양방향 연관관계 - 엔티티(Entity) 매핑 (5)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 단방향 연관관계▶ 객체 연관관계 VS 테이블 연관관계객체 연관관계회원 객체(Member)는 Member.team 필드(멤버 변수)로 팀 객체와 연관관계를 맺는다.회원 객체와 팀 객체는 단방향 관계이다. 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다.테이블 연관관계회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다.회원 테이블과 팀 테이블은 양방향 관계이다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있고, 반대로 팀과 회원도 조인할 수 있다.객체 연관관계와 테이블 연관관계의 가장 큰 차이참조를 통한 연관관계는 항상 단방향이..
soeun2537