
자바 ORM 표준 JPA 프로그래밍 - 기본편 트러블슈팅
persistence.xml 실습을 위해 생성한 프로젝트의 JPA의 설정파일인 persistence.xml이다. 이 파일은 /META-INF/persistence.xml 경로에 위치한다. javax.persistence로 시작하는 속성: JPA 표준 속성 hiber

영속성 컨텍스트 영속성 컨텍스트는 "엔티티를 영구 저장하는 환경"이라는 의미로, 눈에 보이지 않는 논리적인 개념이다. 엔티티 매니저를 통해 접근이 가능하다. 위의 코드를 통해서 영속성 컨텍스트에 엔티티를 저장할 수 있다. 스프링 프레임워크에서는 엔티티 매니저와 영속

객체와 테이블 매핑 @Entity @Entity 어노테이션이 붙은 클래스는 JPA가 관리하며, 이를 엔티티라고 한다. 기본 생성자 필수 제약 사항: final 클래스, enum, interface, inner class에서는 사용할 수 없다. 저장할 필드에

연관관계가 왜 필요할까? 만약 위 코드처럼 참조 대신에 외래 키를 그대로 사용하여 객체를 테이블에 맞추어 모델링하면 어떨까? → 협력 관계를 만들 수 없다. 즉, 객체 그래프 탐색이 불가능하다 연관관계 매핑을 통해 객체 간의 관계를 자연스럽게 연결하고, 데이터베이

프록시 프록시란 실제 클래스 상속 받아서 만들어진 가짜 객체를 말한다. em.find() vs em.getReference() em.find(): 데이터베이스에서 실제 엔티티 객체를 즉시 조회한다. em.getReference(): 데이터베이스 조회를 지연시키는

값 타입이란 단순한 값으로 사용하는 자바 기본 타입이나 객체를 말하며, 식별자가 없고 값만 있으므로 변경 시 추적이 불가능하다는 특징이 있다. 값 타입은 크게 세 가지로 나뉜다. 기본값 타입 임베디드 타입 컬렉션 값 타입 기본값 타입 자바 기본 타입: int,

JPA에서 제공하는 객체 지향 쿼리 언어SQL과 문법 유사엔티티 객체를 대상으로 쿼리SQL을 추상화하여 특정 데이터베이스 SQL에 의존하지 않는다.예제 코드문자가 아닌 자바 코드로 JPQL 작성 가능JPQL 빌더 역할JPA 공식 기능동적 쿼리 작성 가능코드가 복잡하고

페치 조인은 연관된 엔티티나 컬렉션을 SQL로 한 번에 조회하는 기능으로, JPQL의 성능 최적화를 위해 자주 사용된다. 이 기술을 사용하면 N+1 문제를 해결하거나 데이터 조회 성능을 높이는 데 유용하다. 페치 조인 특징 지연로딩보다 우선순위가 높다. 페치 조인

OSIV(Open Session In View)란 세션 관리 전략 중 하나로, 영속성 컨텍스트를 View 영역까지 열어 두는 것을 말한다.이 전략은 기본적으로 spring.jpa.open-in-view가 true로 설정되어 있으며, 상황에 맞게 전략을 유연하게 가져갈

의존성 주입(DI)란 의존성 주입은 객체 간의 관계(의존성)를 외부에서 관리하고 주입하는 방식이다. 즉, 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입시켜 주는 방식을 말한다. DI를 통해 객체 간의 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 JPA 강의를 수강 중 강사님은 엔티티 자체가 해결할 수 있는 것은 엔티티 안에 비즈니스 로직을 넣는 것을 추천하셨다. 그러나 각 패턴의 장단점이 있기때문에 항상 전자가 정답은 아니고, 상황에 맞게 적절한 방법을 선택하

"준영속 엔티티"는 영속성 컨텍스트에서 관리되지 않는 엔티티를 의미한다. 즉, DB에는 존재하지만 현재 영속성 컨텍스트에서는 관리되지 않는 엔티티이다.이러한 준영속 엔티티를 수정하는 방법은 두 가지가 있다.변경 감지병합(merge)변경 감지는 커밋 시점에 JPA가 엔티

벌크 연산이란 한 번의 SQL 쿼리로 여러 개의 데이터를 수정하거나 삭제하는 기능이다.특정 조건인 엔티티에 대해서 값을 동시에 변경할 때, 변경 감지를 사용하면 update sql이 너무 많이 실행될 수 있기 때문에, 벌크 연산을 사용하는 것이 좋다.executeUpd

Spring Data JPA는 기본적으로 SimpleJpaRepository라는 클래스를 통해 CRUD 기능을 제공한다. 이 클래스의 주요 메서드 중 하나인 save() 메서드를 보면, 새로운 엔티티인지 아닌지를 구별한 후 persist나 merge 작업을 수행하는 것