Spring boot 시작하기 #5

ims·2020년 8월 14일

db schema 설정

localhost:3306/study -> study : schema name

https://victorydntmd.tistory.com/321

User, Item, OrderDetail

ERD

구조

ItemRepositoryTest

3개의 entity에 대해서 모두 간단한 CRUD를 구현해주었다.

N : M 설정

OrderDetail

OrderDetail class에서 user와 item과의 N : M 설정을 해보자.

N대M 설정을 할 때는 설정을 하는 Entity 기준으로 한다.

위의 사진과 같이 user에 @ManyToOne annotation을 붙여준다. Long type이 아닌 User type으로 선언을 하면 알아서 user_id 와 mapping을 시켜준다.

User

User entity에 대해서도 설정을 해주어야 한다.

User 입장에서는 user가 one이기 때문에 @OneToMany annotation을 달아준다. fetch type은 LAZY를 걸어준다. mappedBy는 orderDetail에서 걸어준 User의 name과 같은 이름을 달아주어야 한다.

UserRepositoryTest

출력결과 : 2

id가 7인 user가 갖고 있는 item의 id

위와 같이 user쪽에서 OrderDetail에 대해서 접근할 수 있다.

item에 대해서도 똑같이 설정해준다

OrderDetail

Lombok을 쓰게 되면 toString()을 자동으로 생성해주는데 orderDetail에서 user와 User Entity에서 orderDetail이 상호참조를 하게 돼서 overflow가 발생한다. 그래서 @toString(exclude="") 를 통해서 빼주어야 한다.

위와 같이 annotation을 추가해준다.

Item

UserRepositoryTest

그러면 위와 같이 User에서 user와 관련된 item 정보들을 가져올 수 있게 된다.

   Optional<User> findUser = userRepository.findById(7L);

        findUser.ifPresent(selectUser->{
            selectUser.getOrderDetailList().stream().forEach(detail->{
                Item item = detail.getItem();
                System.out.println(item);
            });
        });
profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글