streamDTO

김지원·2023년 9월 20일
0

public class ProductRestController {
    @Autowired
    private ProductService productService; // 기존 쓰던거
   
   
@RequiredArgsConstructor
public class ProductRestController {
    private final ProductService productService; // @RequiredArgsConstructor가 final을 붙힌 생성자를 자동으로 만들어줌
    // 그러면 스프링이 자동으로 IOC컨테이너에서 찾아서 넣어줌(빈 생성자가 사라졌으니까)

db에서 찾을 때, where에 pk나 유니크로 찾으면 1건이거나 0건이니까, null 처리해야해서 Optional로 감싸서 주는데,
그냥 전부 찾거나 해서 List로 받을땐, 0건 찾았어도 빈 리스트니까 null은 아니라서 null처리 안해도 됨


application.yml설정

OSIV (Open Session In View)
오픈인뷰
오픈 인 뷰

https://www.youtube.com/watch?v=fSXh4hWJtKo&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=48&ab_channel=%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

open-in-view: false (디폴트는 ture, 실무에선 보통 false씀)
면 서비스에서 컨트롤러로 돌아오면 db연결 세션 끊김 그래서 lazy로딩 못찾음

근데 또 true하면
메세지컨버터 순환참조로 무한루프니까
@jsonignore, @jsonignoreproperties 엔티티에 붙여야함

근본적으로 엔티티를 컨트롤러까지 보내지 않고 서비스에서 컨트롤러로 dto를 줬다면 안일어났을 일이다


서비스 클래스에
@Transactional(readOnly = true)

오픈인뷰가 false일 때, 영속성 컨텍스트는 트랜잭션 범위를 벗어나는 순간
Entity는 영속성 컨텍스트의 관리를 받지 않는 준영속 상태가 되어버린다.
Lazy Loading의 동작이 불가능하다는 의미이다.

profile
https://github.com/k7850

0개의 댓글

관련 채용 정보