728x90

jpa 8

JPA에서 @Enumerated 사용할 때 주의사항 정리

JPA를 사용하면서 enum 타입을 매핑할 때 자주 사용되는 애노테이션이 @Enumerated입니다. 하지만 잘못 사용하면 치명적인 데이터 오류로 이어질 수 있으므로 주의가 필요합니다. 이 글에서는 @Enumerated의 사용법과 왜 EnumType.ORDINAL을 피해야 하는지 자세히 정리합니다. @Enumerated란?Java의 enum 타입을 JPA 엔티티 필드와 DB 컬럼 간에 어떻게 매핑할지 지정하는 애노테이션입니다.@Enumerated(EnumType.STRING)private Status status;@Enumerated는 기본적으로 EnumType.ORDINAL 방식으로 동작합니다. 타입설명EnumType.ORDINALenum의 순서(index) 를 DB에 저장 (예: 0, 1, 2)Enu..

JPA 2025.05.01

JPA 연관관계 정리 (단방향, 양방향 관계 포함)

JPA(Java Persistence API)에서는 엔티티 간의 관계를 정의할 때 단방향과 양방향 관계를 설정할 수 있습니다. 이 관계들은 Many-to-One, One-to-Many, One-to-One, Many-to-Many 등 다양한 매핑 관계와 함께 설정할 수 있으며, 각 방향에 따라 데이터 흐름과 관계 관리 방식이 달라집니다.이번에는 단방향과 양방향 관계를 포함한 JPA 관계 설정을 정리해 보겠습니다.1. 단방향 관계 (One-Way Relationship)단방향 관계는 한 엔티티에서만 다른 엔티티를 참조하는 관계입니다. 즉, 한 쪽에서만 연관된 엔티티를 관리하고, 다른 쪽에서는 해당 관계를 알지 못하는 형태입니다. 이 경우, 양쪽 엔티티에서 연관된 객체를 조회하거나 수정할 수 없습니다.예시:..

JPA 2025.04.29

양방향 매핑에서 연관관계의 주인에 값을 입력하지 않은 실수

JPA(Java Persistence API)를 사용하면서, 특히 양방향 연관관계를 매핑할 때 자주 발생하는 실수 중 하나는 연관관계의 주인에 값을 제대로 설정하지 않는 것입니다. 이 실수는 데이터베이스에 저장되는 결과가 의도한 대로 동작하지 않거나, 예상치 못한 오류가 발생하는 원인이 됩니다.1. 양방향 연관관계란?JPA에서 양방향 연관관계는 두 개의 엔티티 간에 서로를 참조하는 구조를 말합니다. 예를 들어, Member와 Team 엔티티가 있을 때, Member는 Team을 참조하고, Team은 여러 Member들을 참조하는 관계가 있을 수 있습니다.예시: Member와 Team의 양방향 관계@Entitypublic class Member { @Id @GeneratedValue pri..

JPA 2025.04.29

데이터 중심 설계와 객체 중심 설계의 차이 – JPA 예제로 쉽게 이해하기

안녕하세요! 오늘은 데이터 중심으로 모델링한 예제가 왜 협력 관계를 만들 수 없는지 쉽게 설명해볼게요.우선 아래 코드를 보면서 어떤 부분이 문제가 되는지 살펴봅시다.Team team = new Team();team.setName("TeamA");em.persist(team);Member member = new Member();member.setUsername("memberA");member.setTeamId(team.getId());em.persist(member);Member findMember = em.find(Member.class, member.getId());Long findTeamId = findMember.getTeamId();Team findTeam = em.find(Team.class,..

JPA 2025.04.28

JPA에서 플러시(Flush)와 커밋(Commit)의 차이 + 트랜잭션 관리 완벽 정리

JPA를 공부하다 보면 자주 마주치는 개념 중 하나가 바로 플러시(Flush)와 커밋(Commit)입니다. 이 둘은 비슷해 보이지만 실제로는 역할과 시점이 다릅니다. 또한, 트랜잭션의 관리 방식도 함께 이해해야 JPA를 제대로 활용할 수 있습니다.이 글에서는 플러시와 커밋의 차이, 그리고 트랜잭션의 흐름까지 쉽게 정리해보겠습니다.1. 플러시(Flush)란?정의: JPA의 영속성 컨텍스트(1차 캐시)에 저장된 변경 내용을 DB에 SQL로 반영하는 작업입니다.중요: 플러시는 트랜잭션을 끝내지 않습니다. 단순히 SQL이 실행될 뿐이고, 트랜잭션은 계속 유지됩니다.언제 플러시가 일어날까?직접 호출: em.flush()JPQL 실행 전: 정확한 결과를 위해 자동 플러시커밋 직전: 자동으로 플러시 후 커밋 진행2...

JPA 2025.04.27

JPA 기본키 매핑 전략 완벽 정리

JPA(Java Persistence API)를 사용할 때 가장 먼저 고민하게 되는 부분 중 하나가 바로 기본키(Primary Key) 매핑 전략입니다. 엔티티(Entity)는 데이터베이스 테이블과 매핑되기 때문에, 각 엔티티에는 반드시 고유한 식별자(Primary Key)가 필요합니다.이번 포스팅에서는 JPA에서 제공하는 기본키 매핑 전략에 대해 하나씩 자세히 알아보겠습니다.1. 기본키 매핑 방식의 종류JPA에서는 기본키를 매핑할 때 총 4가지 전략을 제공합니다.직접 할당 (Assigned, 직접 설정)자동 증가 (IDENTITY)시퀀스 (SEQUENCE)테이블 (TABLE)2. 직접 할당 (Assigned)@Idprivate String id;개발자가 직접 기본키 값을 지정합니다.자동 생성되지 않기 ..

JPA 2025.04.26

JPA 영속성 컨텍스트란? 쉽게 이해하는 JPA 핵심 개념

1. 영속성 컨텍스트란 무엇인가?JPA(Java Persistence API)를 사용하다 보면 "영속성 컨텍스트(Persistence Context)"라는 용어를 자주 접하게 됩니다. 영속성 컨텍스트는 엔티티를 관리하는 일종의 메모리 공간으로 이해할 수 있습니다. 더 정확히 말하면, 엔티티 객체를 데이터베이스와 동기화된 상태로 유지해주는 캐시입니다.JPA를 처음 접할 때 혼란스러울 수 있는 이 개념, 지금부터 쉽게 풀어보겠습니다.2. 영속성 컨텍스트의 역할엔티티 관리: 데이터베이스에서 조회한 엔티티 객체를 관리합니다.1차 캐시: 같은 트랜잭션 내에서 동일한 엔티티를 여러 번 조회해도 데이터베이스에 다시 접근하지 않고 메모리에서 가져옵니다.변경 감지 (Dirty Checking): 영속성 컨텍스트에 저장된..

JPA 2025.04.24

JPA에서 트랜젝션

1. 트랜잭션 기본 개념JPA에서 모든 데이터 변경 작업(CREATE, UPDATE, DELETE) 은 반드시 트랜잭션 안에서 이루어져야 해.트랜잭션 생명주기시작: tx.begin();작업 수행: persist, find, remove, 등.성공 시 커밋: tx.commit();오류 시 롤백: tx.rollback(); 2. 매번 트랜잭션을 직접 만드는 방식 (지금처럼)EntityManager 를 사용할 때 매 작업마다 트랜잭션을 시작하고 종료해야 해.이 방식은 단순한 자바 SE 환경 (Spring 없이 순수 JPA) 에서 많이 씀.예시:EntityTransaction tx = em.getTransaction();tx.begin();try { // 작업 em.persist(...); tx..

JPA 2025.04.24
728x90