Everyday Dev System

JPA) N : 1 관계 맵핑 (Thread : Channel : User) 본문

내배캠 주요 학습/JPA 심화

JPA) N : 1 관계 맵핑 (Thread : Channel : User)

chaeyoung- 2023. 7. 31. 11:28
package me.chaeyoung.jpa.userChannel;

import me.chaeyoung.jpa.channel.Channel;
import me.chaeyoung.jpa.channel.ChannelRepository;
import me.chaeyoung.jpa.user.User;
import me.chaeyoung.jpa.user.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.*;


@SpringBootTest
@Rollback(value=false)
@Transactional
class UserChannelRepositoryTest {

    @Autowired
    private UserChannelRepository userChannelRepository;

    @Autowired
    private ChannelRepository channelRepository;

    @Autowired
    private UserRepository userRepository;

    @Test
    void userJoinChannelTest() {

        // given
        var newChannel = Channel.builder().name("new-group").build();
        var newUser = User.builder().username("new User").password("new pass").build();
        var newUserChannel = newChannel.joinUser(newUser);


        // when
        var savedChannel = channelRepository.insertChannel(newChannel);
        var savedUser = userRepository.insertUser(newUser);
        var savedUserChannel = userChannelRepository.insertUserChannel(newUserChannel);

        // then
        var foundChannel = channelRepository.selectChannel(savedChannel.getId());
        assert foundChannel.getUserChannels().stream()
                .map(UserChannel::getChannel)
                .map(Channel::getName)
                .anyMatch(name -> name.equals(newChannel.getName()));
    }
}

 

assert 코드 부분에 Break Point를 걸어두고 디버깅을 시도해보면

아래와 같이 연관관계가 잘 매핑되어 조회해오는 것을 알 수 있습니다.