OneToOne 관계에서의 객체 생성
안녕하세요! 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가 어째서 찍히는 것일까요..? )
답변 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





