어떻게 알고 도와주냐면 board_table 과 board_file_table 연결할 때 위의 같은 연결코드를 작성하였다.
연결코드를 써줌으로써 board2Entity에서 boardFileEntityList에 접근할 수 있도록 해준다. ⇒ 즉, 자기 자식 데이터에 접근이 가능하다. ⇒ board2Entity.getBoardFileEntityList() 는 어디서 가져온 데이터냐면 board_file_table에서 가져온 데이터이다.
get(0) 은 List의 첫번째 인덱스 0번을 의미한다. (아직 단일 파일첨부이기때문에 0번으로 직접적으로 가져왔지만 파일이 여러개이면 for문 같이 반복문을 이용해 가져와야한다.)
public static Board2DTO toBoard2DTO(Board2Entity board2Entity){
Board2DTO board2DTO = new Board2DTO();
board2DTO.setId(board2Entity.getId());
board2DTO.setBoardWriter(board2Entity.getBoardWriter());
board2DTO.setBoardPass(board2Entity.getBoardPass());
board2DTO.setBoardTitle(board2Entity.getBoardTitle());
board2DTO.setBoardContents(board2Entity.getBoardContents());
board2DTO.setBoardHits(board2Entity.getBoardHits());
board2DTO.setBoardCreatedTime(board2Entity.getCreatedTime());
board2DTO.setBoardUpdatedTime(board2Entity.getUpdatedTime());
if(board2Entity.getFileAttached()==0){
board2DTO.setFileAttached(board2Entity.getFileAttached());
}else{
board2DTO.setFileAttached(board2Entity.getFileAttached());
// 파일 이름을 가져가야 함.
// originalFileName, storedFileName : board_file_table(=BoardFileEntity)
// join
// select * from board_table b, board_file_table bf where b.id=bf.board_id
// and where b.id=?
board2DTO.setOriginalFileName(board2Entity.getBoardFileEntityList().get(0).getOriginalFileName());
board2DTO.setStoredFileName(board2Entity.getBoardFileEntityList().get(0).getStoredFileName());
}
return board2DTO;
}
참고 - @Transactional
JPA쿼리가 아닌 직접적으로 쿼리를 작성하여 가져올 때 Service에 직접적인 쿼리를 사용하는 메소드 위에 @Transactional 을 붙여준 적이 있다.
부모Entity에서 자식Entity에 접근할 때는 그 접근하는 메서드를 하는 곳에도 @Transactional을 붙여준다.
board2detail.html
Thymeleaf if문을 써서 파일첨부여부가 1이면 이미지를 보여준다.
Thymeleaf 이미지를 넣는다. (이미지태그에 src "@{|/upload/${board.storedFileName}|}" 실제 경로가 아닌 |/upload/ 라 적었는데 뒤에 경로설정을 한다.)