회사에서 소스코드를 분석하고 에제코드를 작성해보면서
단순히 왜 쓰는지에 대해 이해도가 전혀없이
@Transactional(readOnly = true) 을 주었다.
트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록
별도록 @Transaction 어노테이션을 메서드에 선언해야한다.
Class Level에는 공통적으로 적용되는 읽기전용인
@Transacrtion (readOnly = true) 어노테이션을 선언만하고
실행을 시켜본 결과 당연히 되지않았다.
그래놓고 왜 update가 왜 안될까 고민하고 있었다.
아래와 같이 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록
@Transactional 어노테이션을 달아줘야한다.
@Service
@Transactional(readOnly = true)
class BoardServiceImpl(
val boardRepository: BoardRepository,
val em: EntityManager
) : BoardService {
/** 작성글 리스트 조회 **/
override fun boardList(pageable: Pageable): List<Board> {
return boardRepository.boardList(pageable)
}
/** 작성글 상세 조회 **/
override fun detailBoard(board_id: Long): BoardDTO {
return boardRepository.detailBoard(board_id) ?: throw Exception("board 아이디 잘못 조회")
}
/** 작성글 작성 **/
@Transactional
override fun postBoard(dto: BoardRegisterRequestDTO): Long? {
val board = Board(dto)
em.persist(board)
return board.id
}
/** 작성글 수정 **/
@Transactional
override fun editBoard(dto: BoardModifyRequestDTO): Boolean {
val result = boardRepository.editBoard(dto)
if (!result) throw Exception("존재하지 않는 게시판 요청")
return result
}
정신 똑바로차리고 제발 알고 쓰도록하자.
저런 실수는 학원다니는 사람들도 하지않을 실수일것이다.
'네트워크와 CS' 카테고리의 다른 글
[소매컴싸] Http와 https의 차이점에 대해 알아보자 (4) | 2022.12.22 |
---|---|
[소매컴싸] 소피의 매일 컴퓨터사이언스 (0) | 2022.12.16 |
[ProblemSolver] 개발 서버 구축하고 build 할 때 생기는 이슈들 (0) | 2022.10.23 |
면접 스터디 3주차 DB/Web/Network (0) | 2022.02.23 |
섹션 4. HTTP 메서드 (0) | 2022.02.20 |