작성
·
84
답변 2
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 인턴입니다. 형종님.
값 타입 컬렉션의 대안으로 일대다 관계를 설정한 경우, 연관된 몇 가지 질문에 대해 답변드리겠습니다:
일대다 관계를 설정할 때, 부모 엔티티가 연관된 자식 엔티티 리스트를 가지고 있습니다. 이 관계에서, 자식 엔티티는 외래 키(member_id
)를 통해 부모 엔티티와 연결됩니다.
id가 없는 이유:
AddressEntity
)의 외래 키(member_id
)는 값이 처음에는 null로 설정되며, 부모 상태가 저장되거나 갱신될 때 나중에 설정됩니다.연관된 update 쿼리:
member_id
값이 없기 때문에 insert
쿼리가 먼저 실행됩니다.update
쿼리가 실행되는 것입니다.왜 insert될 때 memberid값이 없는거죠? 일대다는 단방향은 일대 FK가 있어서 다엔 member_id가 없는건가요?
addressentity table엔 member_id 컬럼이 없는데 뭘 업데이트 하는거죠?
AddressEntity
테이블에 member_id
컬럼이 존재해야 합니다. 이 컬럼을 통해 부모-자식 간 FK 관계가 설정됩니다. FK 설정이 빠져 있어서 발생하는 문제일 수 있습니다. 이 부분을 코드나 데이터베이스 구조와 같이 점검해 보셔야 할 것 같습니다.저는 질문자님의 이해를 돕고자 기존 질문에 대한 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
https://drive.google.com/file/d/1tjsu0t3huv-8p0RzDV7d5CkCqyB7w0PW/view?usp=sharing
insert favoriteFoods와 AddressEntity만 될뿐
AddressHistory는 Create밑 Update가 되지 않습니다. 그냥 자체적으로 실행조차 뜨지 않네요