【发布时间】:2021-05-17 19:46:49
【问题描述】:
我正在做一个 Spring/React 项目,我有大约 10 个表,其中包含多个关系。
但我遇到了一个非常烦人的情况,就是找不到正确的解决方案。我有几个表包含 one2many 关系:
Product.category_id --> Category.id
Product.manufacturer_id --> Manufacturer.id
产品实体:
@ManyToOne
@JoinColumn(name="category_id", referencedColumnName = "id", nullable = true)
private Category category;
@ManyToOne
@JoinColumn(name="manufacturer_id", referencedColumnName = "id")
private Manufacturer manufacturer;
产品控制器:
@PostMapping(value="/admin/product")
public ResponseEntity<Object> createProduct(@RequestBody Product product) {
System.out.println(product.getCategory());
System.out.println(product.getManufacturer());
productRepository.save(product);
URI location;
return new ResponseEntity<>("Toegevoegd", HttpStatus.CREATED);
}
@PutMapping(value = "/admin/product/{id}")
public Product updateProduct(@RequestBody Product product, @PathVariable Long id) {
return productRepository.findById(id)
.map(updateProduct -> {
updateProduct.setCategory(product.getCategory());
updateProduct.setManufacturer(product.getManufacturer());
updateProduct.setName(product.getName());
updateProduct.setPrice(product.getPrice());
updateProduct.setTaste(product.getTaste());
updateProduct.setImagePath(product.getImagePath());
updateProduct.setStock(product.getStock());
updateProduct.setDescription(product.getDescription());
updateProduct.setType(product.getType());
return productRepository.save(updateProduct);
})
.orElseGet(() -> {
return productRepository.save(product);
});
}
类别实体:
@OneToMany(mappedBy = "category")
@JsonIgnore
private Set<Product> Product;
当我获得产品概述时,该关系有效,我得到“1 - 测试”,但当我想发送 POST 请求时,制造商/类别始终为空。我用 Postman 发送的输出:
{
"categoryId": "999",
"name":"Test",
"taste":"sdads",
"price":"1",
"stock": "123",
"manufacturerId": "1",
"description" : "213",
"discount" : "0"
}
由于 camelCase 约定,它必须从前端以这种方式发送。烦人的部分是,当我没有在产品类别/产品制造商之间添加关系时,我使用了:
@Column(name="manufacturer_id")
private long manufacturerId;
@Column(name="category_id")
private long categoryId;
它确实有效,我可以发布/放置数据并将其保存到数据库中。当我将此代码与 one2many 映射一起使用时,它显示“类别”已定义(或 smt)。一位老师说框架会自动管理它并说关系还可以。好吧,它不起作用。
用关系保存数据的正确方法是什么?所有其他非关系列在更新/插入时都没有问题。
【问题讨论】:
-
你能把使用
@ManyToOne时应用程序产生的错误或stacktrace贴在这里吗?
标签: java reactjs spring postgresql jpa