Spring Boot, Spring Data JPA сохраняет метод JpaRepository с параметром - PullRequest
0 голосов
/ 28 декабря 2018

Я новичок в Spring и JPA, и я следовал некоторым учебникам, таким как this

Я применил ту же идею к своему контексту приложения, так что у меня есть Food and Ingredientкак класс модели.

Я создал FoodRepository, расширив JpaRepository, и создал FoodController, который отлично работает, когда я добавляю еду без ингредиентов, и класс выглядит так:

@RestController
@RequestMapping("/api")
public class FoodController {

    @Autowired
    FoodRepository foodRepository;

    @GetMapping("/food")
    public List<Food> getAllFoods() {
        return foodRepository.findAll();
    }

    @PostMapping("/food")
    public Food createFood(@Valid @RequestBody Food food) {
        return foodRepository.save(food);
    }

    @GetMapping("/food/{id}")
    public Food getFoodById(@PathVariable(value = "id") Long foodId) {
        return foodRepository.findById(foodId)
                .orElseThrow(() -> new CRSException("Could not find the food with id: " + foodId));
    }

    @PutMapping("/food/{id}")
    public Food updateFood(@PathVariable(value = "id") Long foodId, @Valid @RequestBody Food foodDetails) {

        Food food = foodRepository.findById(foodId)
                .orElseThrow(() -> new CRSException("Could not find the food with id: + foodId)"));

        food.updateFood(foodDetails);

        Food updatedFood = foodRepository.save(food);
        return updatedFood;
    }

    @DeleteMapping("/food/{id}")
    public ResponseEntity<?> deleteFood(@PathVariable(value = "id") Long foodId) {
        Food food = foodRepository.findById(foodId)
                .orElseThrow(() -> new CRSException("Could not find the food with id: + foodId)"));

        foodRepository.delete(food);

        return ResponseEntity.ok().build();
    }

}

I basicalyЯ хочу сохранить еду со списком ингредиентов, но я не знаю, как изменить сигнатуру createFood, чтобы можно было использовать параметр списка ингредиентов в методе и сохранить еду с этими ингредиентами.

Так как я новичок в весенней загрузке, jpa и hibernate;Я не знаю, какую терминологию использовать при поиске.Как этого добиться?

Любая помощь приветствуется

Заранее спасибо

1 Ответ

0 голосов
/ 29 декабря 2018

Вы можете установить ссылку на еду для каждого ингредиента следующим образом:

@PostMapping("/food")
public Food createFood(@Valid @RequestBody Food food) {
    food.getIngredients().foreach((i) -> {i.setFood(food)});
    return foodRepository.save(food);
}

Необходимо учитывать, что ваша сущность Еда имеет следующие значения:

@OneToMany(mappedBy = "food", cascade = CascadeType.ALL)
private List<Ingredients> ingredients;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...