我想删除Recipe(使用Spring数据DAO)但我得到SQL异常:@Entity
public class Account {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "favourite_recipes",
joinColumns = @JoinColumn(name = "account_id"),
inverseJoinColumns = @JoinColumn(name = "recipe_id"))
private Set<Recipe> favouriteRecipes = new HashSet<>(0);
...
}
@Entity
public class Recipe {
...
}
我的实体:
<form action="./manageteams/<?php echo $_GET['t']; ?>" method="post" enctype="multipart/form-data">
如何删除食谱实例?
答案 0 :(得分:0)
您需要处理级联类型,默认情况下设置为ALL。
例如,你可以解决这样的约束:
@ManyToMany(cascade = CascadeType.DETACH)
更多信息:cascade type docs
答案 1 :(得分:0)
您需要从拥有实体一侧删除帐户。
首先从帐户中的食谱列表中删除食谱并保存帐户,然后删除食谱本身。
答案 2 :(得分:0)
正如Amer Qarabsa所说,我必须从账户中删除食谱。
我在Recipe中添加了新字段以获得双向映射
@ManyToMany(cascade = CascadeType.MERGE, mappedBy = "favouriteRecipes")
private Set<Account> recipeLovers = new HashSet<>(0);
服务类中的代码从所有帐户中移除配方+配方中的清除爱好者(配方和recipeId变量未在此处初始化)
Set<Account> recipeLovers = recipe.getRecipeLovers();
recipeLovers.forEach(account ->
account.getFavouriteRecipes()
.removeIf(r -> r.getId() == recipeId));
recipeLovers.clear();
recipeDao.delete(recipe);