
JPA란? 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스를 모아놓은 것으로 자바진영의 ORM 기술 표준이다. ❓JPA를 사용하는 이유? SQL 중심의 개발에서 벗어남 (보다 더 객체 지향적 개발) 일일이 쿼리문을 수정할 필요가 없음 (유지보수 용이) 개발자가 비지니스 로직에만 집중할 수 있음 (생산성 향상) 패러다임 불일치 ...

영속성 컨텍스트(Persistence Context)란? JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구 저장하는 환경"이라는 뜻이다. 아래와 같은 코드로 엔티티를 영속성 컨텍스트에 저장할 수 있다. 🫀 엔티티의 생명주기 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태. 아래 코드와 같이 엔티티를 생성만 하고 영...

트랜잭션(Transaction)이란? 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위이다. 다시 말해 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것이다. 📍트랜잭션의 특성 Atomicity(원자성) 트랜잭션은 DB에 모두 반영되거나, 아예 반영되지 않아야 한다. -> 완료되지 않은 트랜잭션을 DB에 반영하면 안된다. Consistenc...

⚙️ 기본 개념 객체의 연관관계를 공부하기 전에 객체와 테이블 연관관계의 차이를 이해해야 한다. 테이블에서는 테이블 간의 연관관계를 외래 키(Foreign Key)를 사용해 간단하게 매핑한다. 그럼 객체에서는? 참조관계를 활용해서 객체 간의 연관관계를 가지는데 여러가지의 매핑방법이 있다. 들어가기 전 용어 정리 방향(Direction) : 단방향 / 양방...

테이블에서 양방향 연관관계 매핑하려면? 그냥 외래 키(Foreign Key)로 튜플을 연결하면 된다. 테이블에서는 따로 양방향 매핑이라는 개념이 없다. 여기서 객체의 참조와 테이블의 연관관계 간의 패러다임 불일치를 알 수 있다. > 객체에서 양방향 연관관계 매핑하려면? 객체의 참조관계에서 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계가 ...

🚨 연관관계 매핑시 고려해야 할 사항 3가지 - 다중성 - 방향성(단방향, 양방향) - 연관관계의 주인 다중성이란? 다중성은 대칭성이 있다.([N:1]의 반대는 [1:N]) 주의할 점은 다대다 관계는 거의 사용되지 않는다!(실무에서 쓰면 안됨) 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @Many...

관계형 데이터베이스에는 상속관계가 없음슈퍼타입 서브타입 관계라는 모델링 기법이 그나마 객체의 상속과 유사상속관계 매핑 : 객체의 상속/구조와 DB의 슈퍼타입/서브타입 관계를 매핑총 3가지의 방법이 있다.각각 테이블로 변환 -> 조인 전략통합 테이블로 변환 -> 단일 테

공통 매핑 정보가 필요할 때 사용(id, name)객체 지향적으로 봤을 때 테이블마다 공통되는 컬럼만 상속받아서 사용상속관계 매핑이 아님Entity 아님, 테이블과 매핑하지 않음부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공조회, 검색 불가능(em.find(B

Proxy를 왜 사용하게 됐을까?위 질문에 답하기 전에 만약 Member를 조회할 때 Team도 함께 조회를 해야 할까? 하는 질문에 대한 대답을 생각해보자멤버의 이름을 조회하는 코드를 실행할 때 만약 Team까지 같이 조회한다면 낭비가 발생한다. 다시 말해 최적화가

@ManyToOne(fetch = FetchType.LAZY)연관관계 맵핑 어노테이션에 fetch 속성을 부여해서 사용함fetch 속성을 LAZY로 주게 되면 해당 클래스를 프록시 객체로 조회그리고 실제 그 객체가 사용될 때 DB에서 실제 그 값을 가지고 옴team을

CASCADE특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶을 때 사용예 ) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장@OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST)매핑을 할

고아 객체 제거 : 부모 엔티티와 연관관계가 완전히 끊어진 자식 엔티티를 자동으로 삭제orphanRemoval = true참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 보고 삭제하는 기능참조하는 곳이 하나일 때 사용해야 함특정 엔티티가 개인 소유할 때

📌 JPA의 데이터 타입 분류 JPA의 데이터는 Entity 타입과 값 타입으로 분류 가능하다. Entity @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 변수처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 따로 없고

equals()와 hashCode()를 생성할 때 Use getters during code generation을 이용해 생성해주는 것이 좋다.왜냐하면 getter를 사용하지 않을 시 필드에 직접 접근하게 됨. 필드에 직접 접근하면 뭐가 문제일까?프록시일 때 equal

JPA는 다양한 쿼리 방법을 지원JPQL / JPA Criteria / QueryDSL / native SQL / JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용JPA를 사용하면 엔티티 객체를 중심으로 개발문제는 검색 쿼리검색을

JPQL은 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 쿼리하지 않고 엔티티 객체를 대상으로 쿼리함JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음JPQL은 결국 SQL로 변환select m from Member as m where m.age

SELECT 절에 조회할 대상을 지정하는 것프로젝션 대상엔티티 / 임베디드 타입 / 스칼라 타입(숫자, 문자 등 기본 데이터 타입)프로젝션은 모두 영속성 컨텍스트에서 관리됨SELECT m FROM Member m -> 엔티티 프로젝션SELECT m.team FROM M

JPA는 페이징을 다음 두 API로 추상화setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작)setMaxResults(int maxResult) : 조회할 데이터 수위에 두 속성만 설정을 해주면 라이브러리가 알아서 페이징 쿼리를