TIL(22.12.26(월))

allnight5·2022년 12월 26일
0

TIL

목록 보기
24/55

전 TIL에서 작성한 저장소 문제의 경우 무슨.. 빌드에 내가 잘못해서 자동으로 넣어둔건지 이상한 시큐리티가 들어가있어서.. 그랬던 거였다. 소스에 문제가 없을때 한번씩 빌드도 확인해 봐야 한다는 것을 알았고..
//postservice에서

    public PostResponseDto createPost(PostRequestDto requestDto, User user) {
        Post post = new Post(requestDto, user.getUsername(), user);
        post.addUser(user);

//post adduser부분

    public void addUser(User user){
        this.users = user;
        users.getPosts().add(this);
    }

//user에도 데이터를 넣는 형식을 하고싶은데. DB에 데이터가 들어가있으니
//빠져도 되는것인가.. jwt일때는 들어갔었는데 모르겠다.

    @OneToMany(mappedBy = "users" , cascade = CascadeType.REMOVE, orphanRemoval = true)
    private final List<Post> posts = new ArrayList<>();

이번에 entity를 또 그대로 보내다가..

failed to lazily initialize a collection of role: could not initialize proxy - no Session
이런 오류문이 나왔다..

그래서 Dto로 변경해서 보내서 처리하려고 하는데.. 생각보다 안된다. 내일 마저 해서 처리해보려고 한다.

참조사이트1
그런데 찾아보니까. 에러는 영속성 컨텍스트의 생명주기와 프록시에 대한 이해가 부족해서 일어나는 문제라고한다.

Message를 단건조회하면 Message와 Lazy Loading으로 연관된 Member는 바로 초기화 되지 않고 필요할때 정보가 채워지는 프록시 객체로 채워진다.
첫줄을 실행하면 컨트롤러 단에서 다음의 메시지 객체를 갖게 된다는 것이다. 못 채운다. 왜?? 우리는 서비스단에서 트랜잭션이 일어나도록 설정을 해두었다. 그런데 JPA의 영속성 컨텍스트는 보통 트랜잭션과 생명주기를 같이한다. 그 말은 컨트롤러 단으로 나오면서 영속성 상태가 끝난다는 뜻이다. 그럼 더이상 영속성 컨텍스트에서 관리하지 않고 Member에 필요한 값이 있을때 쿼리를 날려 Proxy 객체를 채우지 않는다는 뜻이다. 그래서 에러가 발생하는 것이다.라고한다.

그래서 내일은 트랜잭션,영속성 컨텍스트,Proxy,Lazy Loading에 대해서 찾아보려고한다.

profile
공부기록하기

0개의 댓글