반응형
다이어그램에서 보듯 한 유저는 여러 board를 가질 수 있고 여러 board는 한 user에 속한다.
@Entity //db연동을 위한 모델클래스임을 명시
@Data
public class Board {
...
@ManyToOne
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
}
게시글 입장에선 many to one 관계
- @JoinColumn: 어떤 컬럼과 user 테이블이 연결될지를 설정한다.
- referencedColumnName = "id" : user 테이블의 id와 조인된다. 생략가능
== 글 작성시 사용자 정보도 넣기 ==
BoardController.java
@PostMapping("/form")
public String postForm(@Valid Board board, BindingResult bindingResult, Authentication authentication){
boardValidator.validate(board, bindingResult);
if(bindingResult.hasErrors()) {
return "board/form";
}
String username = authentication.getName();
boardService.save(username, board);
return "redirect:/board/list";
}
-Authentication 을 파라미터로 선언해주면 인증정보가 알아서 담긴다.
- getName() 으로 구한 유저 이름을 board 정보와 함께 boardService에 전달
@Service
public class BoardService {
@Autowired
private BoardRepository boardRepository;
@Autowired
private UserRepository userRepository;
public Board save(String username, Board board){
//1. 넘겨받은 username을 가지고 user의 id 조회
User user = userRepository.findByUsername(username);
board.setUser(user);
return boardRepository.save(board);
}
}
BoardService에서는 컨트롤러에서 넘겨받은 username을 가지고 user 정보를 조회한다.
-> 그러기위해선 UserRepository 에 관련 메소드를 만들어줘야한다.
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username); //컬럼이름에 일치하는 사용자 데이터를 가져온다.
}
@Entity //db연동을 위한 모델클래스임을 명시
@Data
public class User {
...
@OneToMany(mappedBy = "user")
private List<Board> boards = new ArrayList<>();
}
- mappedBy 로 Board 클래스의 user를 적어준다.
- onetomany, manytoone 관계에서 보통 many쪽 에서 소유하는쪽을 @JoinColumn을 써서 적어준다
'Study > SpringBoot' 카테고리의 다른 글
[Springboot] 회원정보 수정1 - 로그인한 유저 정보 보이기 (0) | 2022.05.18 |
---|---|
[Springboot] 회원가입 구현 (0) | 2022.05.16 |
[SpringBoot] 로그인 및 회원가입 처리 -(Spring Security 사용) (0) | 2022.05.11 |
[SpringBoot] 타임리프 if문 (0) | 2021.11.29 |
[SpringBoot] 문제해결: template might not exist or might not be accessible by any of the configured Template Resolvers (1) | 2021.11.18 |