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

리나님의 프로필 이미지
리나

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

OSIV와 성능 최적화

could not initialize proxy [] - no Session

작성

·

642

0

첫번째 이미지 잘 안보이시죠?

https://cdn.inflearn.com/public/files/posts/8b857259-87d7-42a3-8b83-5a0c0481e361/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-02-02%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.08.57.png

여기로 부탁드립니다 ㅠ,ㅠ 크기를 키우는것이 힘드네요..ㅠ.ㅠ

강의 내용대로

  open-in-view: false
  enable_lazy_load_no_trans: false

셋팅하고 (

둘중에 true로 하면 당연 문제가 없습니다... 

)

Service단에

@Transactional(readOnly = true)

안에 getOne을 호출 하였습니다.

프록시 객체가 허용하도록 했는데요

왜 response가 

could not initialize proxy []- no Session*/

왜 이런 에러가 나오는건가요...

혹시 짐작가는게 있을까요?

TransactionSynchronizationManager.getCurrentTransactionName()

혹시나 트렌젝션 안에 작동하지 않는걸까? 라고 생각했지만 트랜젝션 안에 포함 되었습니다.

선생님 감사합니다. 어쩔수없이 이렇게 질문 드립니다.

답변 4

0

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

안녕하세요. 리나님

스키마가 다르면 영속성 컨텍스트도 다르게 설정하기 때문에, 연동이 되지 않습니다.

따라서 LAZY등이 불가능합니다.

이 경우에는 message_user와 Member를 연결하시면 안됩니다. 단순히 PK 값만 가지고 있도록 설계하셔야 합니다.

감사합니다.

0

리나님의 프로필 이미지
리나
질문자

선생님 그럼 한가지만 더 질문 하겠습니다.

Message one = messageRepository.getOne(1L);
Member member = one.getMessageUsers().get(0).getMemberInfo();

이것인데요 

테이블 다이어그램으로 쉽게 표현하겠습니다.

한마리로 모든 연관관계를 LAZY로 셋팅하고

최초 message 출력(그전에 프록시 상태였습니다. )하고 A스키마의 message_users 까지 탐색 후

그 다음 B스키마의 member 까지 탐색하면 (그전에 프록시 상태였습니다. )

맨첫번째 이미지 처럼 에러가 발생됩니다.

결국 이것은 다른 트렌젝션이라서 안되는건가요? 결국 그럼 서로 다른 영속성 컨테스트라서? 인가요?

0

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

네 트랜잭션 메니저가 다르다면 말씀하신 것 처럼 적용하면 됩니다.

감사합니다.

0

리나님의 프로필 이미지
리나
질문자

https://www.inflearn.com/questions/33949

혹시 이분도 저랑 같은 이슈 추측



=========================

선생님 일단 해결한거 같습니다.!!

사실 mysql를 사용하는데 한 프로젝트 안에서 각각 다른 스키마를 사용하고 있었습니다.

그런데 문제는 디폴트로 선정 안된 다른 스키마통해 

JPA getOne 할때나 프록시로된 다른 연관관계를  가져올때 문제가 발생된건데요

그래서 이미 빈으로 등록 한 "{쳇}TransactionManager" 통해

실행하고자 transation optional “transactionManager” 에 추가 하고 하니 문제가 없었습니다. (이해가 될실까요? ㅠ.,ㅠ)

혹시 다른 좋은 방법이 있다면 공유 부탁드립니다 ㅠ,ㅠ

리나님의 프로필 이미지
리나

작성한 질문수

질문하기