[Spring] @Transactional은 컨트롤러에서 동작하지 않는다.

서현서현·2022년 8월 25일
0

Spring

목록 보기
20/31
@Controller
@RequestMapping("/head/menu")
public class MenuCreateController {
	
	private static final Logger logger = LoggerFactory.getLogger(MenuRetrieveController.class);
	
	@Inject
	private MenuService service;
	
	@GetMapping("/form")
	public String getMenuForm(MenuVO menu, Model model) throws Exception {
		return "head/menu/menuForm";
	}
	
	@PostMapping("/form")
	@Transactional
	public String postMenuForm(MenuVO menu, MaterialVO material, RedirectAttributes rttr) throws Exception {
		
		// 입력한 메뉴정보를 메뉴테이블에 등록
		service.createMenu(menu);
		
		// 입력한 메뉴의 재료정보를 재료테이블에 등록해야함
		// 따라서 방금 등록한 메뉴테이블의 메뉴아이디를 get해온 뒤
		// 고기,야채,우유 이런식으로 들어온 재료의 String데이터를 split해 재료테이블에 넣는다.
		String menuId = service.getMenuId(menu.getMenuName());
		String[] buyerprodIdArray = material.getBuyerprodId().split(",");
		for (int i=0; i<buyerprodIdArray.length; i++) {
			System.out.println("콤마를 기준으로 자른 아이디:"+buyerprodIdArray[i]);
			material.setMenuId(menuId);
			material.setBuyerprodId(buyerprodIdArray[i]);
			service.createMaterial(material);
		}

뭐 대충 이런 코드가.... 트랜잭션이 안먹는것이다
대체왜?? 설정도 찾아보고 했지만 이유를 모르겠음 그래서 검색해봤더니 컨트롤러에선......... @Transactional을 쓰지 못한다

참고
https://dimdim.tistory.com/entry/Spring-MVC-Controller-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90-Transactional-%EC%82%AC%EC%9A%A9%EC%97%90-%EB%8C%80%ED%95%9C-%EC%82%BD%EC%A7%88

그래서 서비스단에 옮겻음

	@Override
	@Transactional
	public void createMenu(MenuVO menu, MaterialVO material) throws Exception {
		
		dao.create(menu);

		// 입력한 메뉴의 재료정보를 재료테이블에 등록해야함
		
		// 따라서 방금 등록한 메뉴테이블의 메뉴아이디를 get해온 뒤
		
		// 고기,야채,우유 이런식으로 입력받은 String데이터를 split해 재료테이블에 넣는다.
		
		String menuId = dao.getMenuId(menu.getMenuName());
		String[] buyerprodIdArray = material.getBuyerprodId().split(",");
		for (int i=0; i<buyerprodIdArray.length; i++) {
			System.out.println("콤마를 기준으로 자른 아이디:"+buyerprodIdArray[i]);
			material.setMenuId(menuId);
			material.setBuyerprodId(buyerprodIdArray[i]);
			dao.createMaterial(material);
		}
		
		
	}

테스트해보니 트랜잭션 처리 잘된다!

0개의 댓글