@Transactional public void PrepareDish(Dish dish, Employee employee, OrderNum orderNum, Date date) throws EmptyRecipeException, NotEnoughStockException { List<Ingredient> missingIngredients = stockDao.getIngredientsMissingOnStock(dish); if (missingIngredients.size() == 0) { List<Recipe> recipeList = recipeDao.getAllByDish(dish); for (Recipe r : recipeList) { Ingredient ingredient = r.getIngredient(); Stock stock = stockDao.getStockByName(r.getIngredient().getIngredientName()); Double qty = stock.getQty() - r.getQty(); if (qty > 0) { stock.setQty(qty); stockDao.add(stock); } else throw new NotEnoughStockException("Not enough ingredient on stock", stock); } PreparedDish preparedDish = new PreparedDish(); preparedDish.setDish(dish); preparedDish.setEmployee(employee); preparedDish.setOrder(orderNum); preparedDish.setPrepareDate(date); add(preparedDish); } else throw new NotEnoughStockException("Not enough ingredient on stock", null); }