inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성전이 관련 질문

463

alex108902

작성한 질문수 1

0

안녕하세요. 전 현재 queryDSL 강의까지 듣고 몇달간 프로젝트를 진행중인 학생입니다.

이번에 맞닥뜨리게된 문제가 특이해서 질문 남겨봅니다.

다름이 아니라 CascadeType을 지정하지 않은 상태에서 데이터를 DB에 저장했었습니다.

당시엔 flag를 통한 delete를 기능에 담아내고 있었기 때문입니다.

하지만 시간이 흘러 delete를 해야할 타이밍이 와서 기능을 구현하는데

의존성 때문에 부모 객체가 삭제될 수 없다며
Connection org.postgresql.jdbc.PgConnection@37333b1f marked as broken because of SQLSTATE(08006), ErrorCode(0) 에러가 나며 에러를 띄웠습니다.

아무리 찾아봐도 CascadeType을 통해 JPA에서 영속 상태를 정한다고만 하고

Bard, ChatGpt, Bing 등 비슷한 답을 줬습니다.

서비스 전의 DB라 DB에 있던 튜플들을 전부 삭제하는 것으로 해결했으나 궁금증은 여전히 해결되지 않았습니다.

CascadeType을 지정하지 않았을 때 저장된 값은 CascadeType.ALL로 바꿨을 때도 영속상태로 들어가질 않나요?

만약 그렇다면 해당 값이 어떻게 CascadeType이 지정되기 전에 저장됐는지 아닌지 알 수 있는 건가요?

java jpa

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

CascadeType을 지정하지 않은 경우, 부모 엔티티를 삭제하려고 하면 상기한 에러가 발생할 수 있습니다. 이는 JPA의 영속성 전이에 관한 내용입니다.

CascadeType을 지정하지 않으면 기본값인 CascadeType.NONE이 적용되므로, 해당 엔티티를 영속성 컨텍스트에서 제거하여 DB에서 업데이트된 내용이 반영되도록 작업해야 합니다. 이때 필요한 것이 EntityManager의 remove() 메서드 입니다.

해당 엔티티를 영속성 컨텍스트에서 제거한 후, flush() 메서드를 호출하여 변경된 내용을 DB에 반영할 수 있습니다.

CascadeType을 지정하지 않았을 때 저장된 값도 CascadeType.ALL로 바꾸어도 영속 상태로 들어가지 않습니다. 이는 엔티티의 상태 변화가 트랜잭션을 통해 이루어지기 때문입니다.

CascadeType이 지정되기 전에 저장된 값인지 아닌지에 대해서는 알 수 없습니다. 그러나 Cascade가 적용된 이후로는 부모 엔티티를 삭제하면 자식 엔티티도 함께 삭제되도록 지정되어 있습니다.

이상하게 동작하여 발생한 문제라면, 스택 트레이스 및 디버깅 과정에서 더 깊이 들어가보시는 것이 도움이 될 것입니다. 감사합니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

28

2

inheritance startegy 선택시 고려사항

0

22

1

Entity 동등성 비교

0

21

1

실무 조언 관련 질문입니다.

0

47

1

H2데이터베이스 파일 생성

0

56

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

53

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

52

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

94

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

95

2

연관관계 매핑 질문드립니다.

0

85

2

h2데이터베이스 실행오류

0

108

2

persistence.xml

0

108

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

80

1

영속성 컨텍스트

0

66

1

JPA 프록시

0

96

1

Native Query와 MyBatis

0

70

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

87

1

임베디드 타입 예시 코드 관련 질문

0

115

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

95

3

인텔리제이 패키지 커서 단축키 질문

0

108

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

145

1