인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

최창준님의 프로필 이미지
최창준

작성한 질문수

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

일대다 [1:N]

일대다 관계 단순 조회시 transaction 안걸어 줄 때,자식테이블의 외래키 두가지 질문입니다.

해결된 질문

작성

·

171

0

1. 일대다 관계 조회 시 메서드에 트렌젝션어노테이션을 설정을 안주면 계속 no session 이라는 lazy initial  에러가 나는데 , 이유가 무엇인가요? 현재 플젝에서 data jpa를 사용했는데, 단순 find 할때만 트렌젝션이 생성되고 닫히고,  레이지로딩을 못해서 그런가요?

data jpa랑 강의를 같이 듣고있는데, 연관된 질문이 더 있어서 여기에 올립니다!

2. 

Menu에서 MenuProduct를 단방향으로 연관을 설정해주고 menu_id를 fk로 사용해보는 예시를 만들었는데, menuId를 null로 넣었을 때, 디비에는 업데이트 쿼리가 나가면서 menu_id에 들어가고, 애플리케이션에선 값이 안들어가 있습니다.

이렇게 동작하는 이유가 있을까요?? 엔티티메니져 입장에서 fk라는것을 알고있으니까 null에 값을 넣어줄 거라고 생각했는데, 잘못생각한 것인지 궁금합니다!
지금 예상한 거로는 트렌젝션이 닫히면서 update가 나가서, null에 값을 안넣어 주는건가 라고 생각중인데 맞는지 궁금합니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 최창준님

1. 스프링은 트랜잭션 범위에 영속성 컨텍스트의 범위를 맞춥니다. 따라서 트랜잭션이 종료되면 영속성 컨텍스트도 종료되기 때문에 지연로딩이 불가능합니다.

2. 이렇게 동작하는 것이 정상입니다. JPA는 연관관계가 있는 곳을 관리합니다.  지금처럼 연관관계 없이 이렇게 직접 Long menuId를 사용하는 부분은 관리하지 않습니다.

이번 강의에서 설명드리는 것 처럼 일대다 단방향은 사용하지 마시고, 다대일 양방향으로 설계를 변경하는 것을 추천합니다.

감사합니다.

최창준님의 프로필 이미지
최창준

작성한 질문수

질문하기