inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

값 타입 컬렉션

값 타입 컬렉션 대안

189

형종

작성한 질문수 16

0

image.pngimage.pngimage.png

 

image.png

update도 보면 create one-to-many row 업데이트가

나오지 않으며 id도 1씩 추가가 되지 않습니다. 왜 이런건지 이해가 안되네요 38:37초 입니다.

 

 

java jpa

답변 2

0

김영한

안녕하세요. 형종님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명 (오류 화면, 오류 로그 포함)

 

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

형종

https://drive.google.com/file/d/1tjsu0t3huv-8p0RzDV7d5CkCqyB7w0PW/view?usp=sharing

 

insert favoriteFoods와 AddressEntity만 될뿐

AddressHistory는 Create밑 Update가 되지 않습니다. 그냥 자체적으로 실행조차 뜨지 않네요

 

image.png

 

 

0

김영한

안녕하세요. 형종님

올려주신 코드를 확인해보았는데요.

하이버네이트가 버전이 올라가면서 남기는 로그가 약간 변경된 것 같아요.

create one-to-many row라는 메시지는 나오지 않지만, 다음 로그를 통해서 ADDRESS가 update 되는 것을 확인할 수 있습니다.

Hibernate: 
    /* insert for
        hellojpa.AddressEntity */insert 
    into
        ADDRESS (city, street, zipcode, id) 
    values
        (?, ?, ?, ?)
Hibernate: 
    /* insert for
        hellojpa.AddressEntity */insert 
    into
        ADDRESS (city, street, zipcode, id) 
    values
        (?, ?, ?, ?)
Hibernate: 
    update
        ADDRESS 
    set
        MEMBER_ID=? 
    where
        id=?
Hibernate: 
    update
        ADDRESS 
    set
        MEMBER_ID=? 
    where
        id=?

추가로 AddressEntity의 저장 테이블인(@Table로 매핑한) ADDRESS 테이블에도 데이터가 정상 저장된 것을 데이터베이스를 통해서 확인할 수 있었습니다.

하이버네이트 버전에 따라서 로그가 조금씩 변경되기는 하는데요. 이럴 때는 데이터베이스에 보관된 데이터를 확인해보시면 더 확실히 알 수 있습니다 🙂

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 형종님.

값 타입 컬렉션의 대안으로 일대다 관계를 설정한 경우, 연관된 몇 가지 질문에 대해 답변드리겠습니다:

1. 왜 update 쿼리가 나가는가?

일대다 관계를 설정할 때, 부모 엔티티가 연관된 자식 엔티티 리스트를 가지고 있습니다. 이 관계에서, 자식 엔티티는 외래 키(member_id)를 통해 부모 엔티티와 연결됩니다.

  1. id가 없는 이유:

    • 일대다 관계에서는 자식 엔티티(AddressEntity)의 외래 키(member_id)는 값이 처음에는 null로 설정되며, 부모 상태가 저장되거나 갱신될 때 나중에 설정됩니다.
  2. 연관된 update 쿼리:

    • 처음에 자식 테이블에 데이터를 삽입할 때, 외래 키 member_id 값이 없기 때문에 insert 쿼리가 먼저 실행됩니다.
    • 그 후에, 부모 엔티티와 자식 엔티티를 연결하기 위해 외래 키를 업데이트하는 update 쿼리가 실행되는 것입니다.

관련 질문과 답변

JPA 값 타입 컬렉션 대안에 대한 설명

추가 리소스

JPA 일대일 또는 일대다 관계 매핑

질문 요약 및 답변

  1. 왜 insert될 때 memberid값이 없는거죠? 일대다는 단방향은 일대 FK가 있어서 다엔 member_id가 없는건가요?

    • 네, 처음에는 다쪽의 외래 키가 설정되지 않아 insert될 때는 기본적으로 null로 저장됩니다. 이후 프로세스에서 FK 값이 업데이트 됩니다.
  2. addressentity table엔 member_id 컬럼이 없는데 뭘 업데이트 하는거죠?

    • AddressEntity 테이블에 member_id 컬럼이 존재해야 합니다. 이 컬럼을 통해 부모-자식 간 FK 관계가 설정됩니다. FK 설정이 빠져 있어서 발생하는 문제일 수 있습니다. 이 부분을 코드나 데이터베이스 구조와 같이 점검해 보셔야 할 것 같습니다.

저는 질문자님의 이해를 돕고자 기존 질문에 대한 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

0

33

2

inheritance startegy 선택시 고려사항

0

24

1

Entity 동등성 비교

0

25

1

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

0

48

1

H2데이터베이스 파일 생성

0

60

2

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

0

57

2

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

0

58

1

JPQL 메소드와 락

0

56

1

Delivery @OneToOne

0

62

1

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

0

98

2

UnsupportedOperationException 발생

0

89

3

H2 Database 연결이 안됩니다.

0

98

2

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

0

88

2

h2데이터베이스 실행오류

0

110

2

persistence.xml

0

112

2

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

0

83

1

영속성 컨텍스트

0

70

1

JPA 프록시

0

100

1

Native Query와 MyBatis

0

74

1

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

0

93

1

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

0

121

3

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

0

97

3

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

0

109

2

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

0

149

1