💻
Albert's Til
GitHub
  • 매일매일 조금씩 성장하기
    • README
    • CS
      • Network
      • HTTP
        • NO-CACHE
      • 오류 코드
      • ORM 도구
      • Design Pattern
        • CQRS Pattern
          • Event Sourcing and CQRS pattern
        • Builder Pattern
    • DB
      • MySQL
        • Timeline
        • Pagination
        • Index
        • Database Performance Optimization Strategies
        • B+ tree
        • MySQL Connectors VS MySQL Shell(Scripting) VS MySQL Workbench
        • MySQL Storage Engine Architecture
      • Normalization & Denormalization
      • JPA
        • @Transactional
        • Why JPA?
        • About JPA
        • N+1 Issue
        • Index
        • ElementCollection&CollectionTable
        • orphanRemoval
        • CascadeType
        • Use Subselect
        • Dynamic Instance Creation
        • Paging
        • Order
        • Spefication
        • mappedBy
      • MongoDB
        • ObjectId
      • Why MySQL?
      • ACID properties of transactions
      • Between JPA and JDBC
      • Identifiers in Hibernate/JPA
    • Java
      • Jackson de/serialize
      • Collections.singletonList() vs List.of()
      • Manage dependencies in Gradle
      • Logging Level
      • Bean Validation
      • JVM Internals
        • Threads
          • Frame
        • Shared Between Threads
          • Classloader
            • Class Loader Hierarchy
            • Loading Linking Initialization
      • Java Collection Framework
      • Annotation
      • Generic
      • 디미터 법칙
    • Spring
      • Caching
      • Spring Integration Overview
        • ThreadPollTaskExecutor
        • Messaging Bridge
        • Channel Adapter
        • Poller
        • Configuration and @EnableIntegration
        • Message Endpoints
        • Message Channels
      • HATEOAS
      • @Autowired vs Constructor Dependency Injection
      • Spring Security
        • JWT 토큰 사용한 인가
        • OAuth 2 Login
        • OAuth 2 인증
        • 인가
        • 인증
        • PasswordEncoder
      • IoC Container
      • Filter,Interceptor,AOP,Argument Resolver
      • Spring Annotation
      • About Spring
    • Kafka
      • Error Channel
    • Infra
      • Scale Up || Scale Out
      • Docker
        • Dockerfile
        • Docker Hub Deploy
        • Command
      • Cloud 유형
        • Infrastructure as a Service
        • Platform as a Service
        • Software as a Service
      • 무중단 배포
        • 엔진엑스(Nginx)
      • 코드 자동 배포
        • Technical
      • AWS EC2
        • PEM(Privacy Enhanced Mail) 키
      • AWS RDS
      • AWS S3
    • CodeSquad
      • Spring Boot Project 1주차 회고
      • Spring Boot Project 2주차 회고
      • Spirng Boot Project 3주차 회고
      • Spring Boot Project 4주차 회고
    • Foody Moody 프로젝트
      • Query Performance Comparison
      • HeartCount Asynchronous Issue
      • DeferredResult
      • ResponseBodyEmitter
      • SseEmitter (Spring)
      • Server-Sent Events (SSE)
      • 기술 스택 적용 이유
      • NO-CACHE(HTTP)
      • Transactional
    • DDD
      • AggregateId
    • Test
      • RestAssured
    • Coding and Algorithmic Problems
      • 819. Most Common Word
      • 344. Reverse String
      • 125. Valid Palindrome
      • 937. Reorder Data in Log Files
    • Node
      • Async... Await...
      • Custom Transactional Decorator Challenger
    • Python
      • Python Basic Grammar
        • Comments and Input/Output
        • Variable
        • Data type
        • Operations and syntax
        • List,Tuple,Dictionary,Set
        • Function
        • Conditional statement
        • Loop
    • HTML
      • HTML Basic
      • HTML Basic Tags
      • HTML Form Tags
      • HTML Table Tags
    • CSS
      • CSS Basic
      • CSS Practice
Powered by GitBook
On this page
  • 유형
  • CascadeType.ALL
  • CascadeType.PERSIST
  • CascadeType.MERGE
  • CascadeType.REMOVE
  • CascadeType.REFRESH
  • CascadeType.DETACH
  • 가이드라인
  • 저장 작업 (CascadeType.PERSIST):
  • 병합 작업 (CascadeType.MERGE):
  • 삭제 작업 (CascadeType.REMOVE):
  • 새로고침 작업 (CascadeType.REFRESH):
  • 분리 작업 (CascadeType.DETACH):

Was this helpful?

  1. 매일매일 조금씩 성장하기
  2. DB
  3. JPA

CascadeType

연쇄 작업 유형

유형

CascadeType.ALL

모든 연쇄 작업을 수행합니다. 저장(PERSIST), 병합(MERGE), 삭제(REMOVE), 새로고침(REFRESH), 및 분리(DETACH) 작업이 연관된 엔티티에 적용됩니다.

즉, 부모 엔티티에 적용된 모든 작업이 연관된 자식 엔티티에도 전파됩니다. 따라서 부모 엔티티의 저장, 병합, 삭제, 새로고침, 분리 작업이 연관된 엔티티에 모두 적용됩니다.

CascadeType.PERSIST

저장 작업을 수행합니다. 연관된 엔티티가 새로 생성되거나 기존에 있던 경우에도 저장 작업이 연관된 엔티티에 적용됩니다.

따라서 연관된 엔티티를 새로 생성하거나 이미 존재하는 경우에도 저장 작업이 적용됩니다.

ParentEntity parent = new ParentEntity();
parent.getChildren().add(new ChildEntity());  // 새로운 자식 엔티티 추가

entityManager.persist(parent);  // 부모와 연관된 자식 엔티티들이 모두 저장됨

CascadeType.MERGE

병합 작업을 수행합니다. 연관된 엔티티의 변경 내용이 병합 작업을 수행한 엔티티에 적용됩니다.

즉, 연관된 엔티티의 변경 내용이 병합 작업을 수행한 엔티티에 적용됩니다.

ParentEntity parent = entityManager.find(ParentEntity.class, parentId);
parent.getChildren().get(0).setName("New Name");  // 자식 엔티티의 속성 변경

entityManager.merge(parent);  // 변경된 자식 엔티티가 병합됨

CascadeType.REMOVE

삭제 작업을 수행합니다. 연관된 엔티티가 삭제될 때 해당 작업이 연관된 엔티티에 적용됩니다.

연관된 엔티티가 삭제될 때 해당 작업이 연관된 엔티티에 적용됩니다.

ParentEntity parent = entityManager.find(ParentEntity.class, parentId);
parent.getChildren().remove(0);  // 자식 엔티티 제거

entityManager.merge(parent);  // 연관된 자식 엔티티가 삭제됨

CascadeType.REFRESH

새로고침 작업을 수행합니다. 연관된 엔티티가 새로고침될 때 해당 작업이 연관된 엔티티에 적용됩니다.

연관된 엔티티의 상태가 변경되어도 이 작업을 사용하여 새로운 상태로 엔티티를 업데이트할 수 있습니다.

ParentEntity parent = entityManager.find(ParentEntity.class, parentId);
parent.getChildren().get(0).setName("Updated Name");  // 자식 엔티티의 속성 변경

entityManager.refresh(parent);  // 부모와 연관된 자식 엔티티가 모두 새로고침됨

CascadeType.DETACH

분리 작업을 수행합니다. 연관된 엔티티가 분리될 때 해당 작업이 연관된 엔티티에 적용됩니다.

분리 작업을 수행하면 연관된 엔티티가 영속성 컨텍스트에서 분리되어 변경 사항을 추적하지 않게 됩니다.

ParentEntity parent = entityManager.find(ParentEntity.class, parentId);

entityManager.detach(parent);  // 부모와 연관된 자식 엔티티들이 모두 분리됨

가이드라인

CascadeType를 선택할 때에는 관련된 엔티티 간의 의존성, 비즈니스 규칙, 데이터 일관성 요구사항을 고려하고, 실제로 필요한 연쇄 작업을 정확하게 지정해야 합니다. 적절한 CascadeType을 선택하면 연관된 엔티티 간의 작업을 편리하게 처리하고 데이터 일관성을 유지할 수 있습니다.

저장 작업 (CascadeType.PERSIST):

  • 부모 엔티티와 연관된 자식 엔티티를 항상 함께 저장해야 하는 경우에 유용합니다.

  • 자식 엔티티를 부모 엔티티에 추가하고, 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장됩니다.

  • 예를 들어, 부모-자식 관계에서 부모를 저장할 때 자식도 함께 저장되어야 하는 경우 사용할 수 있습니다.

병합 작업 (CascadeType.MERGE):

  • 부모 엔티티와 연관된 자식 엔티티의 변경 내용을 부모 엔티티와 함께 병합해야 하는 경우에 유용합니다.

  • 자식 엔티티를 수정하고, 부모 엔티티를 병합할 때 자식 엔티티의 변경 내용도 함께 병합됩니다.

  • 예를 들어, 부모-자식 관계에서 부모를 병합할 때 자식의 변경 내용도 함께 병합되어야 하는 경우 사용할 수 있습니다.

삭제 작업 (CascadeType.REMOVE):

  • 부모 엔티티가 삭제될 때 연관된 자식 엔티티도 함께 삭제해야 하는 경우에 유용합니다.

  • 부모 엔티티를 삭제하면 연관된 자식 엔티티도 자동으로 삭제됩니다.

  • 예를 들어, 부모-자식 관계에서 부모를 삭제할 때 자식도 함께 삭제되어야 하는 경우 사용할 수 있습니다.

새로고침 작업 (CascadeType.REFRESH):

  • 부모 엔티티를 새로고침할 때 연관된 자식 엔티티도 함께 새로고침해야 하는 경우에 유용합니다.

  • 부모 엔티티를 새로고침하면 연관된 자식 엔티티도 자동으로 새로고침됩니다.

  • 예를 들어, 부모-자식 관계에서 부모를 새로고침할 때 자식도 함께 새로고침되어야 하는 경우 사용할 수 있습니다.

분리 작업 (CascadeType.DETACH):

  • 부모 엔티티를 분리할 때 연관된 자식 엔티티도 함께 분리해야 하는 경우에 유용합니다.

  • 부모 엔티티를 분리하면 연관된 자식 엔티티도 자동으로 분리됩니다.

  • 예를 들어, 부모-자식 관계에서 부모를 분리할 때 자식도 함께 분리되어야 하는 경우 사용할 수 있습니다.

Last updated 1 year ago

Was this helpful?