当我上传一个图像时,我得到一个image_id,当我使用该id上传产品时,上传成功,但product表中的image_id字段为空。
我已经提供了下面的代码,如果你无法重现这个问题,你可以在这里找到代码https://github.com/My-Portfolio-Projects/FoodBox.git
这是产品实体
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "products", schema = "foodbox")
public class Product {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "product_id")
private int productId;
@Basic
@Column(name = "name")
private String name;
@Basic
@Column(name = "description")
private String description;
@Basic
@Column(name = "price")
private BigDecimal price;
@Basic
@Column(name = "quantity_in_stock")
private int quantityInStock;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "image_id", referencedColumnName = "image_id")
private Image image;
}
字符串
这是图像实体
@NoArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "images", schema = "foodbox")
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "image_id", nullable = false)
private Integer id;
@Column(name = "image_name", nullable = false)
private String name;
@Lob
@Column(name = "image_data", nullable = false)
private byte[] imageData;
public Image(String name, byte[] data) {
this.name = name;
this.imageData = data;
}
}
型
这是上传图像的控制器逻辑,它可以工作
//Part of ImageController.java
@PostMapping(value = "/image",consumes = MediaType.MULTIPART_FORM_DATA_VALUE )
public ResponseEntity<Integer> createImage(@RequestPart("image") MultipartFile data) throws IOException {
String name = data.getOriginalFilename();
Image image = imageService.createImage(name, data.getBytes());
return ResponseEntity.ok(image.getId());
}
//Part of ImageService.java
public Image createImage(String name,byte[] data) {
Image image = new Image(name,data);
return this.imageRepository.save(image);
}
//Part of ImageRepository
Image save(Image image);
型
这是控制器的逻辑上传一个新的产品,这也工程
//Part of ProductController.java
@PostMapping(value="/products")
public Product createProduct(@RequestBody Product product) {
return productService.createProduct(product);
}
//Part of ProductService.java
public Product createProduct(Product product) {
return productRepository.save(product);
}
//Part of ProductRepository which extends CrudRepository
@Override
Product save(Product product);
型
1条答案
按热度按时间57hvy0tb1#
有多个不正确的,不是最佳做法在你的代码。
对于您的示例,这是工作对象和方法:
字符串
首先调用WebImage。然后从响应中获取创建的图像的id,并将其放入WebProduct的@RequestBody中。因此WebProduct请求体应该如下所示:
型
编辑-01:你也不需要覆盖仓库的保存方法。如果可能的话,只要使用默认的方法。你可以像在你的例子
productRepository.save(entity);
中那样调用它们,而不需要覆盖任何东西。型