[JPA] No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call
·
JPA
에러가 발생한 이유EntityManager 는 트랜잭션 안에서만 동작한다.EntityManager 가 메서드 내에서 동작할 때 현재 트랜잭션이 없기 때문에 발생한다.해결하려면 트랜잭션 내에서 실행되도록 보장해야 한다.해결법실행하려는 메서드(또는 클래스)에 @Transactional 애너테이션을 붙인다.코드 예시@Transactional // 트랜잭션 내에서 동작하도록 보장@Testvoid example() { // ...} 읽어주셔서 감사합니다.
[JPA] cascade = CascadeType.REMOVE, orphanRemoval = true 두 옵션을 명시적으로 사용하는 이유
·
JPA
JPA에서 @OneToMany같은 연관관계 매핑에 사용하는 애너테이션을 사용할 때 cacade 옵션과 orphanRemoval 옵션을 볼 수 있다.이 옵션에 대해서는 간단하게 요약하면 아래와 같다.CascadeType 그리고 orphanRemovalcascade = CascadeType.REMOVE이 옵션은 부모 엔티티의 라이프 사이클 변경이 자식 엔티티로 전파되도록 지정하는 옵션이다.부모 엔티티가 삭제될 때 자식 엔티티들도 같이 삭제된다.orphanRemove = true이 옵션은 부모 엔티티의 컬렉션에서 제거된 자식 엔티티들을 자동으로 삭제하도록 지정하는 옵션이다.만약 부모 엔티티의 컬렉션에서 자식 엔티티가 제거되면, 영속성 컨텍스트에서도 해당 자식 엔티티에 대해 삭제 작업이 즉시 수행된다.두 옵션에..