일대다 관계 단순 조회시 transaction 안걸어 줄 때,자식테이블의 외래키 두가지 질문입니다.
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를 사용하는 부분은 관리하지 않습니다.
이번 강의에서 설명드리는 것 처럼 일대다 단방향은 사용하지 마시고, 다대일 양방향으로 설계를 변경하는 것을 추천합니다.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
55
2
inheritance startegy 선택시 고려사항
0
39
1
Entity 동등성 비교
0
40
1
실무 조언 관련 질문입니다.
0
65
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
67
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
62
1
JPQL 메소드와 락
0
62
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
101
2
연관관계 매핑 질문드립니다.
0
94
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
87
1
영속성 컨텍스트
0
74
1
JPA 프록시
0
105
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
125
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
101
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
152
1





