inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

OneToOne 관계에서의 객체 생성

해결된 질문

528

땅땅

작성한 질문수 3

0

안녕하세요! Qeurydsl 강의 너무 잘 듣고있습니다~ 항상 감사합니다~

이번에 궁금한 점이 생겼는데 OneToOne 관계에서의 객체생성 입니다.

member 테이블과 member_detail이라는테이블이 존재하는데 이 때 member_detail 테이블에서 member 테이블의 id를 외래키로 가지고 있는 상태입니다.

이 때 엔티티 매핑을 아래와 같이 진행하였습니다.

그리고 아래 사진과 같이 테스트 두가지를 진행하였는데,

첫번째 테스트는 제가 원하는 데이터베이스 값대로 잘 들어가는 것을 확인하였습니다!

하지만 두번째 테스트는 제대로 동작하지 않고 

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : study.datajpa.entity.Member.memberDetail -> study.datajpa.entity.MemberDetail; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : study.datajpa.entity.Member.memberDetail -> study.datajpa.entity.MemberDetail

다음과 같이 에러코드가 찍히는데 혹시 그 원인이 어떤 것일까요?

그리고 첫번째 테스트코드를 짜면서 든 의문이 주석의 질문인데 이 답변도 같이 해주신다면 정말 감사합니다~!
(질문 내용: save후 find가 동작할때 flush가 일어나지 않았는데 DB Qeury가 어째서 찍히는 것일까요..? )

java spring 웹앱 JPA spring-boot

답변 1

1

김영한

안녕하세요 요한님

우선 1번 질문먼저^^!

두번째 테스트에서 

MemberDetail memberDetail = new MemberDetail(...)

memberDetailRepository.save(memberDetail) -> 요 부분이 빠졌습니다^^!

JPA의 persist를 호출할 때, 해당 객체와 연관된 모든 객체도 영속 상태여야 합니다.

(object references an unsaved transient instance -> 이 오류메시지가 그 뜻입니다)

그리고 2번 질문이 좋네요^^

2번은 구현을 어떻게 하셨느지 안보이는데, JPA에서 em.find()를 제외한 모든 호출은 JPQL을 통한 호출입니다. JPQL을 통한 모든 호출은 우선 데이터베이스를 조회합니다.

em.find()는 정확하게 엔티티 ID로 엔티티를 찾을 수 있기 때문에 영속성 컨텍스트만 조회하면 쉽게 결과를 얻을 수 있습니다.

그런데 JPQL은 복잡한 쿼리이기 때문에 기술적으로 이 JPQL을 번역해서 영속성 컨테스트를 조회하는 것은 한계가 있습니다. 그래서 우선 JPQL을 SQL로 변환한 다음 데이터베이스를 먼저 조회합니다^^!

OrderServiceTest 상문주문 테스트 시 update 쿼리 문의

0

27

1

sdk 설정 오류

0

64

2

오탈자 - @Transactional

0

62

1

src/test/resources 테스트 경로 문제

0

55

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

70

1

MemberRepositoryTest 실행오류

0

86

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

195

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

152

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

56

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

79

1

기본 생성자

0

66

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

106

1

멤버서비스테스트 부분에서 막힙니다.

0

173

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

123

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

128

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

120

1

24분 27초 연관관계 편의 메서드 위치

0

118

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

114

2

빌드 툴, Gradle

0

63

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

81

2

Repository에서 EntityManager 주입 방식 차이

0

97

1

롬복과 사용자 정의 setter 메서드

0

77

1

주문 목록 조회 fetch join 질문드립니다

0

90

1

dirty checking 질문드립니다.

0

86

1