🍀Spring/📖jpa

🍀Spring/📖jpa

[JPA] 영속성 관리(Persistence Context, OSIV)

✅ 트랜잭션 범위의 영속성 컨텍스트🔹스프링 컨테이너의 기본 동작 스프링은 트랜잭션 범위의 영속성 컨텍스트를 기본 전략으로 사용한다. 이 전략은 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다.트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 동일하며, 트랜잭션 종료 시, 영속성 컨텍스트도 동일하게 종료하게 된다. 스프링 어플리케이션에서는 @Transactional을 사용하면 호출한 메소드를 실행하기 직전에 스프링의 트랜잭션 AOP가 먼저 동작한다. 스프링 트랜잭션 AOP는 대상 메소드를 호출하기 직전에 트랜잭션을 시작하고, 대상 메소드가 정상 종료되면 트랜잭션을 커밋하면서 종료한다. 이때 영속성 컨텍스트로 동일한 라이프 사이클을 가지게 된다. 스프링 트랜잭션 A..

🍀Spring/📖jpa

[JPA] Spring Data JPA

✅ Spring Data JPA란? Spring Data 프로젝트는 JPA, 몽고DB, REDIS, HADOOP, GEMFIRE 같은 다양한 데이터 저장소에 대한 접근을 추상화해서 개발자 편의를 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여준다. 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원한다. 따라서 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다. 일반적인 CRUD 메소드는 JpaRepository 인터페이스가 공통으로 제공한다save(S): 새로운 엔티티는 저장하고 이미 있는 엔티티는 수정한다.delete(T): 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove()를 호출한다findOne..

🍀Spring/📖jpa

[JPA] @Transactional

✅ 트랜잭션의 네 가지 속성🔹트랜잭션 전파(Transaction Propagation) A의 트랜잭션이 실행되고 있을 때, B의 트랜잭션이 별개로 시작되고 있다. 이러한 경우 어떻게 해야 할까? 🔻PROPAGATION_REQUIRED (Default)진행 중인 트랜잭션이 없으면 새로 시작하고, 이미 시작된 트랜잭션이 있으면 이에 참여한다DefaultTransactionDefinition의 기본 값이다. B는 A의 트랜잭션에 참여하기 때문에. A의 (2)번 위치에서 예외가 발생하면, B는 취소된다. 🔻PROPAGATION_REQUIRES_NEW항상 새로운 트랜잭션을 시작한다A, B는 각각 새로운 트랜잭션을 시작하기 때문에 독립적인 트랜잭션이 된다. 따라서 A의 (2)번 위치에서 예외가 발생해도, B는 커밋..

🍀Spring/📖jpa

[JPA] JPQL 총정리

💡흔히 알고있는 JPA의 Entity Manager가 Hibernate에서는 Session이라 불린다. 그래서 Hibernate에서는 Open Session In View라 하고, JPA에서는 Open EntityManager In View라 하는데 관례상 OSIV라 한다. JPQL : Java Persistence Query Language → Java 표준QuertDSL : JPQL을 좀 더 쉽게 쓸 수 있게 해주는 구현체, 빌더 클래스 모음✅ JPQL(Java Persistence Query Language)엔티티 객체를 조회하는 객체지향 쿼리//쿼리 생성 String jpql = "SELECT m FROM Member as m WHERE m.name = 'kim'"; List resultList ..

Wating
🍀Spring/📖jpa

[JPA] 값 타입

✅ JPA 값 타입 분류와 특징엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경 시 추적 불가생명 주기를 엔티티에 의존공유하지 않고, 복사해서 사용해야 한다불변 객체로 만들어 사용하는 것이 좋다 ✅ 임베디드 타입(embedded type, 복합 값 타입)새로운 값 타입을 직접 정의할 수 있다.JPA는 임베디드 타입(embedded type)이라고 한다.주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 한다.int, String과 같은 값타입이다. 추적도 되지 않고 변경하..

🍀Spring/📖jpa

[JPA] 영속성 전이 : CASCADE

✅ 영속성 전이란?JPA에서는 엔티티 객체가 영속성 상태에 있어야지 영속성 컨텍스트에서 관리가 가능하다. 영속성 전이란, 부모 엔티티의 영속성 상태가 자식 엔티티에게까지 전파되는 것을 뜻한다. 이로써 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장되거나, 삭제할 때 자식 엔티티도 함께 삭제할 수 있다. 🔻영속성 전이의 종류ALL: 모든 상태 변화(생성, 수정, 삭제)를 전파PERSIST: 새로운 엔티티를 생성할 때 전파MERGE: 엔티티를 병합(수정)할 때 전파REMOVE: 엔티티를 삭제할 때 전파REFRESH: 엔티티를 리프레시할 때 전파DETACH: 엔티티를 분리할 때 전파 🔹저장MemberCascade@Entity public class MemberCascade { @Id @GeneratedVal..

🍀Spring/📖jpa

[JPA] 프록시, 즉시&지연로딩

✅ JPA 프록시란?💡여기서 설명하는 부분은 hibernate의 proxy에 관한 내용이다 객체가 객체 그래프로 연관된 객체들을 탐색할때, 데이터베이스에 저장되어 있는 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라 실제 사용하는 시점에 데이터베이스에서 조회(지연 로딩)할 수 있게 해주는 기술이다. 프록시 객체는 실제 클래스를 상속 받아서 만들어진 겉모양만 똑같은 가짜 객체다. 여기서 사용된 프록시는 타겟에 대한 접근 제어로 사용되었다. cross cutting concern으로 사용된 것은 아니다. 🔻프록시 구조실제 클래스를 상속 받아서 만들어진다.실제 클래스와 겉모양이 같다.사용하는 입장(Client)에서 진짜 객체인지 프록시 객체인지 알지 못하고 항상 진짜 객체인 것처럼 사용한다. 🔻프록시 위..

Wating
🍀Spring/📖jpa

[JPA] 상속관계 매핑

✅ 상속관계 매핑 객체지향에는 클래스끼리 상속관계가 존재하지만 데이터베이스에서 테이블 간의 상속관계는 지원하지 않는다. 그 대신 데이터베이스의 슈퍼타입, 서브타입 관계라는 모델링 기법을 통해서 객체의 상속관계를 표현할 수 있는 방법이 있다. Item 테이블이 슈퍼타입, Album, Movie, Book 테이블들이 서브타입으로 모델링된 것이다. 🔹조인 전략 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") // default : DTYPE @DiscriminatorValue("value") 부모 타입과 자식 타입을 모두 테이블로 만드는 전략이다. 이후 자식 타입 조회 시 조인을 통해 조회하는 방식으로 사용..

🍀Spring/📖jpa

[JPA] 연관관계 매핑 총정리

⚙️ 학습 환경Intellij IDEh2 DB : 2.2.222hibernate : 5.6.15.Final 💡JPA의 연관관계 매핑은 객체의 참조와 테이블의 외래 키를 매핑하는 것에서의 간극의 차이를 해결하고, 객체를 객체 답게 사용하기 위한 방법이다. 현재까지 데이터지향적인 방법으로 객체를 설계했다면 객체를 객체답게 사용하기 위한 방법을 매핑으로 해결한다. 연관관계를 매핑할 때는 다음 3가지를 고려해서 매핑해야 한다. 👉 회원과 팀의 관계가 있을 경우를 예시로 들었다.방향(Direction)단방향 : [회원 → 팀] or [팀 → 회원], 둘 중 한 쪽만 참조하는 것을 단방향 관계라 한다 양방향 : [회원 → 팀, 팀 → 회원], 양쪽 모두 서로 참조하는 것을 양방향 관계라 한다 다중성(Multipli..

🍀Spring/📖jpa

[JPA] Auto Increment

💡"Auto Increment 전략"은 데이터베이스에서 테이블의 기본 키(primary key) 값을 자동으로 증가시키는 전략이다. 기본 키 값은 보통 숫자로 표현되며, 각 새로운 레코드(행)이 추가될 때마다 자동으로 증가한다. ✅ IDENTITY 전략IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임하는 전략이다. 데이터베이스가 기본 키를 자동으로 생성해준다. Entity Classpackage jpabook.start; import javax.persistence.*; @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String userName; ..

jhcode33
'🍀Spring/📖jpa' 카테고리의 글 목록