使用尚未持久化的对象

Using a object which is not already persisted

我正在开发一个 Spring-MVC 项目。在项目中,我有 2 tables ProductBasic 和 ProductImage。用户应该能够在 ProductImage table 中上传最多 5 张图像。 ProductImage table 具有对 ProductBasic 的外键引用。

问题:用户在同一 JSP 页面上输入产品信息并上传产品图片。如果 ProductBasic 尚未保留,我如何保存 productImages?

我正在粘贴一些代码,请看一下

产品控制器:

@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中table,所以可以。

产品基本型号:

@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;}
}

产品图片模型:

@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;}

}

如果需要任何说明,请告诉我。欢迎提出任何建议。谢谢你。

只需更改此:

@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);