JPA11 JPA 학습목록 📝 GPT에게 물어본 질문 목록1) 연관관계 매핑 (1:N vs N:1)JPA 에서 N대1은 테이블에서 자식테이블에 FK가 있듯이 객체관에 관계에서도 N 쪽이 연관관계의 주인을 가져가잖아반면에 1대N은 연관관계의 주인을 1쪽이 가져가잖아 (ex. TEAM, MEMBER)굳이 이렇게 하는 이유가 있을까?@OneToMany @JoinColumn(name="TEAM_ID") List members = new ArrayList(); 2) mappedBy 가 필요한 이유JPA 객체간의 양방향 처리를 할때 (객체 : MEMBER, TEAM)@OneToMany(mappedBy="team") 이렇게 처리를 해주잖아 왜 해주는거지?안해주면 생기는 문제가 뭐야?어차피 연관관계 메서드로 동기화처리 해주잖아./* 연관관계 .. JPA 2024. 12. 21. JPA에서 단방향 매핑을 우선으로 하는 이유 (단방향 → 필요시 양방향) 📝 JPA 단방향 매핑과 양방향 매핑왜 단방향 매핑을 우선적으로 사용하는가?단순성과 유지보수성단방향 매핑은 코드를 단순하게 만들고 유지보수를 용이하게 합니다.양방향 매핑은 객체 간의 관계를 양쪽에서 관리해야 하므로 복잡도가 증가합니다.성능단방향 매핑은 필요 없는 추가 쿼리 생성을 방지합니다.양방향 매핑은 잘못 사용할 경우 예상치 못한 SELECT나 UPDATE 쿼리가 발생할 수 있습니다.연관관계의 복잡성양방향 매핑은 두 객체 간의 관계를 양쪽에서 동기화해야 하므로 연관관계 편의 메서드를 잘못 작성하거나 누락하면 데이터 불일치가 발생할 수 있습니다.단방향 매핑과 양방향 매핑의 차이1. 단방향 매핑 (추천)@Entitypublic class Member { @Id @GeneratedValue p.. JPA 2024. 12. 9. JPA 엔티티 양방향 관계에서 연관관계 주인이 필요한 이유 📝 JPA 연관 관계의 주인 11. 문제 상황: 양방향 관계에서 외래 키 관리 충돌예제 설계Team과 Member는 양방향 관계로 설계되어 있습니다.Team은 여러 Member를 가질 수 있으며, Member는 하나의 Team에 속합니다.데이터베이스에서는 Member 테이블에 TEAM_ID라는 외래 키가 존재합니다.문제 코드@Entitypublic class Team { @Id @GeneratedValue private Long id; @OneToMany @JoinColumn(name = "TEAM_ID") // Team도 외래 키를 관리하려고 시도 private List members = new ArrayList();}@Entitypublic class Member {.. JPA 2024. 12. 9. JPA 엔티티의 객체지향적 설계 package jpashop.jpaorder.domain;import javax.persistence.*;import java.time.LocalDateTime;@Entity@Table(name = "ORDERS")public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; @Column(name = "MEMBER_ID") private Long memberId; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus orderStatus;} ❓ 이런 방식의 설계는 객체지향스럽지 않다 RDB에 맞춘 설계이다 객.. JPA 2024. 12. 9. JPA PK 생성전략 @GeneratedValue(strategy = GenerationType.❓) 📝 JPA GenerationType 비교1. GenerationType.IDENTITY특징: 데이터베이스에 의존하여 기본 키를 생성합니다.동작 방식:PK는 데이터베이스에서 AUTO_INCREMENT 또는 IDENTITY 컬럼으로 생성됩니다.em.persist() 호출 시 즉시 INSERT 쿼리를 실행하고, 데이터베이스가 생성한 키 값을 가져옵니다.장점: 설정이 간단하며, 데이터베이스의 ID 생성 기능을 그대로 활용.단점:PK가 INSERT 이후에 결정되므로, 다른 엔티티와 연관 관계를 처리할 때 비효율적.INSERT 지연이 불가능.추천 상황: 데이터베이스에 ID 생성 위임이 필요할 때.2. GenerationType.SEQUENCE특징: 데이터베이스의 시퀀스 객체를 사용하여 PK를 생성.동작 방식:J.. JPA 2024. 12. 9. JPA EntityManagerFactory, EntityManager는 사용 후 꼭 닫아야 한다 📝 JPA 리소스 누수란 무엇인가?프로그래밍에서 "누수"란, 사용된 리소스가 적절히 해제되지 않고 계속 점유되는 상태를 의미합니다. 이는 메모리, 파일 핸들, 데이터베이스 연결 등의 리소스가 반환되지 않아 시스템 성능에 영향을 미칠 수 있습니다.1. JPA에서의 리소스 누수란?EntityManager와 EntityManagerFactory의 역할EntityManager:데이터베이스와의 세션 역할을 수행하며, 영속성 컨텍스트(Persistence Context)를 관리.애플리케이션에서 데이터베이스 작업을 수행할 때마다 생성 및 종료해야 함.EntityManagerFactory:EntityManager를 생성하는 데 사용되는 고비용 객체.데이터베이스 연결 풀과 같은 리소스를 관리하므로 애플리케이션 종료 시.. JPA 2024. 12. 5. JPA 구동방식 📝 JPA 구동 방식JPA의 구동 방식은 Persistence → EntityManagerFactory → EntityManager의 계층적 구조를 따릅니다. 주요 클래스와 구동 방식을 단계별로 설명합니다.1. JPA의 주요 클래스 및 역할Persistence:JPA 표준에서 제공하는 유틸리티 클래스.META-INF/persistence.xml 파일을 읽어 EntityManagerFactory를 생성하는 역할.EntityManagerFactory:EntityManager를 생성하기 위한 팩토리 클래스.데이터베이스와의 연결 정보를 포함하며 애플리케이션 전반에서 공유 가능.EntityManager:데이터베이스와의 실제 상호작용(삽입, 조회, 수정, 삭제 등)을 처리.영속성 컨텍스트(Persistence C.. JPA 2024. 12. 5. hibernate entitymanager 의존성 📝 Hibernate EntityManager란?Hibernate EntityManager는 Hibernate 프레임워크에서 JPA(Java Persistence API)의 핵심 클래스인 EntityManager를 구현하는 라이브러리입니다. 이를 통해 Hibernate는 JPA 표준을 따르는 ORM(Object-Relational Mapping) 도구로 사용할 수 있습니다.1. EntityManager란?EntityManager는 JPA(Java Persistence API)에서 제공하는 주요 인터페이스로, 데이터베이스 작업(삽입, 조회, 수정, 삭제)을 수행하는 역할을 합니다.주요 기능:엔티티의 영속성 관리: 엔티티 객체를 데이터베이스에 저장하거나 삭제. 엔티티 객체와 데이터베이스 간의 상태 동기화... JPA 2024. 12. 5. em.persist vs em.merge package jpabook.jpashop.repository;import jakarta.persistence.EntityManager;import jpabook.jpashop.domain.item.Item;import lombok.RequiredArgsConstructor;import org.springframework.stereotype.Repository;import java.util.List;@Repository@RequiredArgsConstructorpublic class ItemRepository { private final EntityManager em; public void save(Item item) { if (item.getId() == null) { em.persi.. JPA 2024. 11. 30. 도메인 주도설계와 OOP의 관계에 대한 chatGPT와의 질의응답 ❓ 질의JPA 를 통한 개발을 진행하고 있는데 Member 클래스는 MemberRepository랑 MemberService를 이용해서 로직을 만들었다. (join, findById, findAll) 같은 것들을 근데 Item 클래스는 비즈니스 로직이 Item클래스 내부에 있는거 같아 public void addQuantity(int quantity) {this.stockQuantity += quantity} 이렇게 하는게 도메인 주도 설계라는데 왜 이렇게 하는거지? 객체지향하고도 관계가 있나? 도메인 주도 설계와 객체지향 설계1. 왜 비즈니스 로직을 도메인 객체(Item) 내부에 두는가?핵심 이유: 응집성(Cohesion)을 높이고 도메인 객체의 역할을 강화하기 위해객체는 데이터(stockQuan.. JPA 2024. 11. 24. JPA FetchType.EAGER의 N+1 문제 & cascadeType.ALL 사용 이유 & 연관관계 편의 메서드 @ManyToOne(fetch = FetchType.EAGER)와 N+1 문제문제 설명@ManyToOne(fetch = FetchType.EAGER) 설정은 N+1 문제를 유발할 가능성이 높습니다. 예를 들어, 아래와 같은 상황을 가정해보겠습니다.코드 예시@Entitypublic class Order { @Id private Long id; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "member_id") private Member member;} @Entitypublic class Member { @Id private Long id; private String name;} JPQL 예시List .. JPA 2024. 11. 24. 이전 1 다음