로직은 분명 오류가 없다고 생각하는데 오류가 나서 봤더니
TransactionRequiredException이 였다.
리포지토리
@Repository
@RequiredArgsConstructor
public class TodoListRepository {
private final EntityManager em;
public void save(TodoList todoList) {
em.persist(todoList);
}
}
컨트롤러
//오류가 발생한 부분
if (todoList == null) {
TodoList newTodolist = TodoList.createTodoList(member, date);
todoListRepository.save(newTodolist);
}
데이터를 변경하는 부분을 @Transactionl 어노테이션이 붙지 않은 부분에서 처리해서 나는 오류같다.
데이터의 변경에서 중간에 오류가 발생한다면 원상태로 복구하는 것이 중요한데
데이터를 변경하는 부분에서 안전하게 처리하지 못했던 것이다.
즉 데이터를 변경하는 부분은 반드시 @Transactional어노테이션, 즉 트랜잭션을 안전하게 해주는 처리를 해줘야한다.
(조회할때는 @Transactional이 안 붙은 리포지토리로 처리해도 상관없다.)