JPA

·Back-end
🫧 @SQLDelete JPA에서 기본적인 삭제는 Hard Delete로 되어 있다. 이 삭제 방식을 @SQLDelete를 통해 쿼리를 작성해두면, delete가 호출될 때 데이터를 실제로 삭제하지 않고 미리 정의해둔 쿼리를 실행하도록 방식 변경이 가능하다. Hard Delete 물리 삭제라고도 하며, 데이터베이스에 Delete Query를 날려 해당 데이터를 실제로 삭제한다. Soft Delete 논리 삭제라고도 하며, 데이터베이스에 Update Query를 날려 해당 데이터가 삭제된 것을 하나의 컬럼을 이용하여 구분한다. @SQLDelete는 논리 삭제를 위한 기능인 것이다. 🫧 문제 발견 테스트 코드를 작성하다가 발견하게 된 문제.. @Test @DisplayName("회원을 논리 삭제한다") vo..
·Back-end
이전 포스트에서 다루었던 CascadeType.REMOVE 와 orphanRemoval = true 옵션이 각각 고아객체를 어떻게 처리하는지 알아보고자 한다. 🤔 고아객체 부모 엔티티와 연관관계가 끊어진 자식 엔티티 - 부모가 제거될 때, 부모와 연관되어 있는 모든 자식 엔티티들은 고아객체가 된다. - 부모 엔티티와 자식 엔티티 사이의 연관관계를 삭제할 때, 해당 자식 엔티티는 고아객체가 된다. 공통 예제 코드 CascadeType.REMOVE 와 orphanRemoval = true 옵션이 각각 고아객체를 어떻게 처리하는지 알아보기 위하여, Review 와 ReviewImage 엔티티를 바탕으로 예제 코드를 작성해 보았다. 먼저 두 옵션에 대한 차이점을 제외하고, 공통되는 사항은 아래와 같다. Revi..
·Back-end
🌱 Entity의 상태 (생명 주기) JPA에서 엔티티는 크게 4가지 상태를 가진다. 1. Transient (비영속) 엔티티 객체가 Java 메모리에서만 존재하고, 영속성 컨텍스트와 아무 관련 없는 상태 Person person = new Person(); 2. Persistent (영속) 엔티티 객체가 영속성 컨텍스트에 관리된 상태 영속 상태라고 바로 데이터베이스에 쿼리가 날라가는 것은 아니고 주로 트랜잭션이 commit 되거나 flush 메서드 실행 시 데이터베이스에 반영 된다. entityManger.persist(person); 3. Detached (준영속) 엔티티 객체가 영속성 컨텍스트에 저장되었다가 분리된 상태 더이상 영속성 컨텍스트에 의해 관리되지 않기 때문에 1차 캐시 등에서 모든 정보..
·Back-end
🌱 Entity의 상태 (생명 주기)JPA에서 엔티티는 크게 4가지 상태를 가지며, 상태를 전환시키는 기능을 EntityManager가 제공한다.1. Transient(비영속): 엔티티 객체가 Java 메모리에서만 존재하고, 영속성 컨텍스트와 아무 관련 없는 상태2. Persistent(영속): 엔티티 객체가 영속성 컨텍스트에 관리된 상태(영속 상태라고 바로 DB에 쿼리가 날라가는 것 X)3. Detached(준영속): 엔티티 객체가 영속성 컨텍스트에 저장되었다가 분리된 상태4. Removed(삭제): 실제 DB 삭제를 요청한 상태 🌱 Hibernate JPA EntityManager 핵심 기능1️⃣ Persistpersist는 엔티티의 새로운 인스턴스를 영속성 컨텍스트에 저장할 때 사용된다.Pers..
·Back-end
☁️ JPA 인터페이스 EntityManagerFactory EntityManager Persistence Context 관련 정보를 찾다가 이해에 도움이 될 찰떡같은 비유가 있어서 해당 블로그 사진을 참조한다. 🫧 EntityManagerFactory JPA 설정을 기반으로 EntityManager 인스턴스를 생성하는 팩토리 역할 (여러 EntityManager 생성 가능) 애플리케이션이 DB를 하나만 사용하는 경우 EntityManagerFactory 인스턴스를 한 번만 생성하고 재사용 더보기 🤔 여러 개의 DB를 사용하는 경우에는 EntityManagerFactory 인스턴스를 어떻게 다룰까? 1. 단일 EntityManagerFactory 인스턴스 사용 여러 DB를 사용하더라도, 모든 DB의 설정..
·Back-end
@Entity란? JPA를 사용해 테이블과 매핑할 클래스에 붙이는 어노테이션이다. @Entity가 붙은 클래스는 JPA가 관리하는 객체가 된다. 🧐 무분별한 어노테이션 사용 @Setter // 문제 1. 객체가 무분별하게 변경될 가능성 있음 @Getter @NoArgsConstructor // 문제 2. 기본 생성자의 접근 제어자가 불명확함 @AllArgsConstructor // 문제 3. 객체 내부의 인스턴스 멤버들을 모두 가지고 있는 생성자를 생성 @Builder // 문제 4. 모든 매개변수가 생성자 param으로 들어가 객체 생성 시 받지 않아야 할 매개변수도 빌더에 노출 @Data // 문제 5. 사용하지 않는 어노테이션을 따로 exclude 할 수 없기 때문에 개별 어노테이션 사용 @Enti..
서채리
'JPA' 태그의 글 목록