전체 글
-
JPA에서 `orphanRemoval`과 `CascadeType.REMOVE` 차이JPA 2024. 10. 9. 23:21
개요JPA에서 orphanRemoval과 CascadeType.REMOVE는 엔티티 삭제 시 다른 방식으로 동작한다. 이 둘의 차이를 이해하려면 각각의 개념과 동작 방식을 알아야 한다.orphanRemoval과 CascadeType.REMOVE 기본 동작orphanRemoval부모 엔티티에서 자식 엔티티를 컬렉션에서 제거하면 자식 엔티티가 고아가 되어 자동으로 삭제된다.자식이 부모 엔티티 없이 존재할 수 없도록 한다.CascadeType.REMOVE부모 엔티티가 삭제될 때만 연관된 자식 엔티티가 함께 삭제된다.부모가 삭제될 때 자식도 함께 삭제되는 전이 동작을 의미한다.동일하게 동작하는 경우부모 엔티티가 삭제될 때, 자식 엔티티도 삭제되는 경우.orphanRemoval과 CascadeType.REMOVE..
-
JPA Entity에 public or protected no-arg constructor가 필수인 이유JPA 2024. 10. 9. 22:29
개요JPA Entity에 public or protected no-arg constructor가 필수인 이유JPA 엔티티 클래스의 기본 생성자와 리플렉션JPA 명세엔티티 클래스는 기본 생성자(매개변수가 없는 생성자)를 반드시 가져야 한다.추가로 다른 생성자를 가지는 것은 상관 없다.기본 생성자는 반드시 public 또는 protected로 선언되어야 한다.원문The entity class must have a no-arg constructor. The entity class may have other constructors as well. The no-arg constructor must be public or protected.위의 내용이 있는 JPA 스펙: https://jakarta.ee/speci..
-
Spring Framework의 테스트 클래스에서 단일 생성자로 의존성 자동 주입이 되지 않는 이유Spring Boot 2024. 10. 9. 21:39
사전 지식Spring Framework 4.3부터 해당 빈(bean)의 생성자가 하나뿐인 경우, 그 생성자에 @Autowired를 붙이지 않아도 생성자 주입이 된다.원문As of Spring Framework 4.3, an @Autowired annotation on such a constructor is no longer necessary if the target bean defines only one constructor to begin with. However, if several constructors are available and there is no primary/default constructor, at least one of the constructors must be annotated ..
-
JPA 연관 관계의 주인과 소유 측: 개념 및 예제JPA 2024. 5. 4. 18:26
JPA 연관 관계에 대한 학습을 하다보면 관계의 주인이라는 표현이 나온다.이에 대해 자세히 알아보자.예제 코드// In Customer class:@OneToMany(mappedBy="customer")private Set orders;// In Order class:@ManyToOneprivate Customer customer;The owner of the relationship (관계의 주인)"관계의 주인(The owner of the relationship)"은 엔티티 클래스 자체가 아니라, 관계를 관리하는 필드 또는 프로퍼티를 의미한다.JPA의 레퍼런스 어디에서도 엔티티 클래스에 owner라는 표현을 쓰지 않는다.예제 코드에서 Order 클래스의 customer 필드가 관계의 주인이다.이는 외래..
-
JPA 연관 관계 어노테이션의 속성 분석JPA 2024. 5. 4. 16:04
JPA의 연관 관계를 정의하는 어노테이션에는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany가 있다.그리고 각 어노테이션에는 여러 가지 속성들로 관계를 더 명확히 정의하는 방법을 제공한다.이 글에서는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany의 각 속성의 목적과 사용 방법에 대해 알아보자.targetEntity목적: 연관 대상 엔티티 클래스를 지정한다.기본 값*ToOne: 관계를 저장하는 필드 또는 프로퍼티의 타입. 즉, 어노테이션이 붙은 필드 또는 프로퍼티의 타입.*ToMany: collection의 parameterized type. 단, collection이 Java generic을 사용하여 정의되었을 때에만 적용된다. 그..
-
JPA : 영속성 전이(Cascade)JPA 2024. 5. 2. 21:42
JPA에서 영속성 전이(Cascade)는 엔티티의 상태 변화를 관련된 엔티티들에게도 전파하는 메커니즘을 말한다. 즉, 한 엔티티에 대한 특정 연산(예: 저장, 삭제, 병합)이 그 엔티티와 관련된 다른 엔티티들에게도 적용되도록 할 수 있다. 이는 엔티티 간의 관계를 정의할 때 설정할 수 있는 옵션이며, 코드를 보다 깔끔하게 유지하고 데이터 일관성을 보장하는 데 도움이 된다.CascadeType 종류JPA에서는 다음과 같은 종류의 CascadeType 옵션이 있다.1. CascadeType.ALL설명: ALL 옵션은 모든 캐스케이드 타입(PERSIST, MERGE, REMOVE, DETACH, REFRESH)을 적용한다.모든 영속성 관련 연산이 연관된 모든 엔티티에도 적용된다.적용 사례: 엔티티와 연관된 모..
-
Spring Data JPA 가이드 모음JPA 2024. 5. 2. 00:18
Spring Boot/JPA 시작하기작성 중..Spring Boot에서 JPA 시작하기JPA 연관 관계JPA : 영속성 전이(Cascade)JPA 연관 관계의 주인과 소유 측: 개념 및 예제JPA 연관 관계 어노테이션의 속성 분석부록JPA에서 신규 엔티티 처리: EntityManager.persist()와 JpaRepository.save()의 차이점 파악하기Spring Boot JPA : Java 날짜/시간 데이터 타입과 JPA, MySQL 타임존의 관계참고 자료Baeldung - All Spring Data GuidesBaeldung - Learn JPA & HibernateBaeldung - N+1 Problem in Hibernate and Spring Data JPA[책] 자바 ORM 표준 JP..
-
JPA에서 신규 엔티티 처리: EntityManager.persist()와 JpaRepository.save()의 차이점 파악하기JPA 2024. 4. 30. 22:08
동일한 신규 Entity를 생성하여 EntityManager.persist()와 JpaRepository.save()를 통해 영속화 시켰을 때의 동작과 결과가 다를 때가 있다. 이에 대해 알아보자.EntityManager.persist()persist()를 호출할 때 전달된 엔티티 인스턴스 자체가 영속 상태가 되어 변화를 추적한다. 이 메소드는 반환값이 없으며, 저장하는 객체와 영속성 컨텍스트에 들어간 객체가 동일한 참조를 유지한다.EntityManager.merge()merge()를 호출할 때 전달된 분리된(detached) 엔티티 인스턴스의 상태를 복사하여 영속성 컨텍스트에 병합한다. 이 메소드는 새로운 영속 상태의 엔티티 인스턴스를 반환하며, 전달된 원래의 분리된 엔티티는 여전히 분리 상태로 남아 ..