@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을 쓰지 못한다
그래서 서비스단에 옮겻음
@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);
}
}
테스트해보니 트랜잭션 처리 잘된다!