Spring Boot Hibernate:在更新父实体的同时更新子实体?

rbl8hiat  于 2023-01-13  发布在  Spring
关注(0)|答案(1)|浏览(191)

我有以下具有正确Map的实体,并且可以通过子实体正确创建记录。例如,在创建配方时,我可以将配料添加到此配方中,并通过其实体保存此配方。然后,配方将使用其配料正确创建。
现在我需要更新配方,在此阶段我不确定在Hibernate中更新子记录的最适当方式。我按请求设置了配方字段,但如果原始配方有3种成分(假设为IngA、IngB、IngC),而更新后的成分有相同和不同的成分(假设为IngA、IngX、IngY),我应该怎么办?
在此阶段,我是否应该删除属于配方的所有成分,然后添加来自更新请求的所有成分?
或者我应该如何处理要更新的子数据?
下面是我需要完成的更新方法:

public void update(RecipeRequest request) {
    final Recipe recipe = recipeRepository.findById(request.getId())
            .orElseThrow(() -> new NoSuchElementFoundException(NOT_FOUND_RECIPE));
    recipe.setTitle(capitalizeFully(request.getTitle()));

    request.getRecipeIngredients().stream()
            .forEach(recipeIngredient -> {
                // get each of the requested ingredients
                final Ingredient ingredient = ingredientRepository.findById(recipeIngredient.getIngredientId())
                        .orElseThrow(() -> new NoSuchElementFoundException(NOT_FOUND_INGREDIENT));
                // then add to the RecipeIngredient (bridge table)
                recipe.addRecipeIngredient(new RecipeIngredient(recipe, ingredient));
            });
    recipeRepository.save(recipe);
}
tvz2xvvm

tvz2xvvm1#

在加载Recipe之后清除这个集合就可以了,Hibernate会自动为你删除。

相关问题