

localhost:3306/study -> study : schema name



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

OrderDetail class에서 user와 item과의 N : M 설정을 해보자.
N대M 설정을 할 때는 설정을 하는 Entity 기준으로 한다.

위의 사진과 같이 user에
@ManyToOneannotation을 붙여준다. Long type이 아닌 User type으로 선언을 하면 알아서 user_id 와 mapping을 시켜준다.
User entity에 대해서도 설정을 해주어야 한다.

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

출력결과 : 2
id가 7인 user가 갖고 있는 item의 id

위와 같이 user쪽에서 OrderDetail에 대해서 접근할 수 있다.
item에 대해서도 똑같이 설정해준다

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

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


그러면 위와 같이 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);
});
});