我想插入一件货物。
数据库中已经有或没有某些类别。
我见过许多类似的问题和解决方案,看上去像CascadeType
其实我不明白。
这里有两门课和考试
@Entity
@Table(name = "t_goods")
@Data
public class Goods implements Serializable {
private static final long serialVersionUID = -7781710173608724249L;
@Id
@GenericGenerator(name = "goodsid",strategy = "uuid")
@GeneratedValue(generator = "goodsid")
private String goodsId;
private String goodsName;
@ManyToMany(cascade = {CascadeType.PERSIST})
private Set<GoodsCate> goodsCateSet;
}@Entity
@Table(name = "t_category",uniqueConstraints = { @UniqueConstraint(columnNames = "cateName")})
@Getter
@Setter
public class GoodsCate implements Serializable {
private static final long serialVersionUID = -8990216455436375344L;
@Id
@GenericGenerator(name = "goodscateid",strategy = "uuid")
@GeneratedValue(generator = "goodscateid")
private String cateId;
private String cateName;
@ManyToMany(mappedBy = "goodsCateSet")
private Set<Goods> goods;
}@Test
void test(){
Goods goods = new Goods();
goods.setGoodsName("apple");
GoodsCate food = new GoodsCate();
food.setCateName("food");
GoodsCate fooddb= goodsCateRepo.findGoodsCateByCateName(food.getCateName());
if(fooddb!=null){
food=fooddb;
}
GoodsCate vegetable= new GoodsCate();
vegetable.setCateName("vegetable");
GoodsCate vegetabledb = goodsCateRepo.findGoodsCateByCateName(vegetable.getCateName());
if(vegetabledb!=null){
vegetable = vegetabledb;
}
Set<GoodsCate> goodsCates = Sets.newSet(food, vegetable);
goods.set(goodsCates);
// goodsRepo is a interface extends jpaReposity
goodsRepo.save(goods);
}它抛出
传递给org.springframework.dao.InvalidDataAccessApiUsageException:的persist:com.xx.xxx.GoodsCate分离实体
发布于 2020-06-04 16:45:30
看起来你还没有把你的分类和商品联系起来。
我建议添加两个实用方法(例如,商品中的addCategory(Category category)和类别中的addGood(Goods good) ),它们用于同步双向关联的双方。当您使用双向关联时,应该始终提供这些方法,否则,您将面临非常微妙的状态传播问题。
在Goods中
public void addCategory(Category category) {
categories.add(category);
category.getGoods().add(this);
}在Category中
public void addGood(Good good) {
goods.add(good);
good.getCategory().add(this);
}Note:还不要忘记添加remove实用程序,就像上面的一样。
然后您可以使用下面的代码
@Test
void test(){
Goods goods = new Goods();
goods.setGoodsName("apple");
GoodsCate food = new GoodsCate();
food.setCateName("food");
GoodsCate fooddb= goodsCateRepo.findGoodsCateByCateName(food.getCateName());
if(fooddb!=null){
food=fooddb;
}
GoodsCate vegetable= new GoodsCate();
vegetable.setCateName("vegetable");
GoodsCate vegetabledb = goodsCateRepo.findGoodsCateByCateName(vegetable.getCateName());
if(vegetabledb!=null){
vegetable = vegetabledb;
}
//********After adding mentioned utilites********
goods.addCategory(food);
goods.addCategory(vegetable);
// goodsRepo is a interface extends jpaReposity
goodsRepo.save(goods);
}https://stackoverflow.com/questions/62198996
复制相似问题