我正在开发一个Spring-MVC项目。在项目中,我有2个表ProductBasic和ProductImage。用户应该能够在ProductImage表中上传最多5个图像。 ProductImage表具有对ProductBasic的外键引用。
问题:用户输入产品信息并在同一个JSP页面上传产品。如果ProductBasic尚未保留,如何保存productImages?
我正在粘贴一些代码,请看看
ProductController:
@RequestMapping(value="/product/add",method = RequestMethod.POST)
public String addProduct(@ModelAttribute("product") ProductBasic productBasic,Model model){
User user = userService.getCurrentlyAuthenticatedUser();
model.addAttribute("product", new ProductBasic());
productBasic.setProductimage(productprofileimage);
productBasicService.addProduct(user,productBasic);
productprofileimage =null;
return "redirect:/product/show";
}
上述方法只添加一个图像,而不是在ProductImage表中,因此它可以工作。
ProductBasic模型:
@Entity
@Table(name = "product")
public class ProductBasic {
@OneToMany(mappedBy = "uploadinguser",fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
private Set<ProductImage> productImageSet = new HashSet<>();
public Set<ProductImage> getProductImageSet(){return this.productImageSet;}
public void setProductImageSet(Set<ProductImage> productImageSet){this.productImageSet=productImageSet;}
}
ProductImage模型:
@Entity
@Table(name = "productimages")
public class ProductImage {
@Transient
private List<MultipartFile> productImages;
@ManyToOne
@JoinColumn(name = "id")
private ProductBasic productimageupload;
public ProductBasic getProductimageupload(){return this.productimageupload;}
public void setProductimageupload(ProductBasic productimageupload){this.productimageupload=productimageupload;}
}
如果需要澄清,请告诉我。欢迎任何建议。谢谢。
答案 0 :(得分:1)
只需改变一下:
@OneToMany(mappedBy = "uploadinguser",fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
到此:
@OneToMany(mappedBy = "uploadinguser",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
使用cascade = CascadeType.ALL
也会自动级联持久化和合并操作。因此,您可以保存ProductBasic
根实体,同时也会保存图像。
请确保您也设置了关联的两面:
ProductBasic productBasic = ...;
ProductImage image1 = new ProductImage();
productBasic.getProductImageSet().add(image1);
image1.setProductimageupload(productBasic);
ProductImage image2 = new ProductImage();
productBasic.getProductImageSet().add(image2);
image2.setProductimageupload(productBasic);