希望这是一个简单的问题,但我对JPA很陌生,很难确定如何格式化发送到Spring API的JSON POST请求体。我有两个实体,产品和条形码,其关系如下:
该关系由条形码表中的product_id列定义。
@OneToOne // one barcode relates to one product
private ProductEntity product;
产品中的关系定义:
@OneToMany(cascade = CascadeType.ALL)
private List<BarcodeEntity> barcodes = new ArrayList<>();
我的问题是,我如何做一个JSON POST请求来插入一个与数据库中已经存在的产品相关的条形码?我需要传递整个Product实体吗,还是有办法只传递product_id?
当产品已经存在时,我希望如何创建新的条形码条目:
{
"barcode": "string",
"barcodeStatus": "string",
"codeStandard": "string",
"product": 1,
"title": "string",
"unitQuantity": 0
}
{
"barcode": "string",
"barcodeStatus": "string",
"codeStandard": "string",
"product": {
productInfo: "...",
....,
},
"title": "string",
"unitQuantity": 0
}
本质上,我试图弄清楚如何插入一个新实体,并定义它与数据库中已经存在的另一个实体的关系。我肯定我已经把它复杂化了。
产品控制器中的终结点:
@PostMapping(produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public ProductRest createProduct(@Valid @RequestBody ProductRequestModel productDetails) throws Exception {
ProductRest returnValue = new ProductRest();
ModelMapper modelMapper = new ModelMapper();
ProductDto productDto = modelMapper.map(productDetails, ProductDto.class);
ProductDto createdProduct = productService.createProduct(productDto);
returnValue = modelMapper.map(createdProduct, ProductRest.class);
return returnValue;
}
产品服务文件中的createProduct方法:
public ProductDto createProduct(ProductDto product) {
if (productRepo.findByTitle(product.getTitle()) != null)
throw new ServiceException("Record with matching title already exists");
// Set product id for each barcode
for (int i = 0; i < product.getBarcodes().size(); i++) {
ProductBarcodeDto barcode = product.getBarcodes().get(i);
barcode.setProduct(product);
product.getBarcodes().set(i, barcode);
}
ModelMapper modelMapper = new ModelMapper();
ProductEntity productEntity = modelMapper.map(product, ProductEntity.class);
ProductEntity storedProductDetails = productRepo.save(productEntity);
ProductDto returnValue = modelMapper.map(storedProductDetails, ProductDto.class);
return returnValue;
}
ProductDto中的字段(定义getter/setters和空构造函数;只是未显示):
public class ProductDto {
private long id;
private List<BarcodeDto> barcodes;
private String title;
private String description;
private String SKU;
private ProductVariationDto variation;
private double cost;
private double retailPrice;
private LocalDate launchDate;
private LocalDate discontinueDate;
private String discontinueReason;
private String salesChannel;
private LabelDto label;
private int secondaryStockLevel;
private int primaryStockLevel;
private LocalDateTime modifiedDate;
private LocalDateTime createdDate;
private String productStatus;
private List<SupplierDto> suppliers;
}
我将其设置为ProductRequestModel需要一个BarCodeEntity。这是正确的吗?还是我应该将它更改为条形码ID只有一个整数值?
在条形码控制器中创建条形码终结点:
@PostMapping(produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public BarcodeRest createBarcode(@Valid @RequestBody BarcodeRequestModel barcodeDetails) throws Exception {
BarcodeRest returnValue = new BarcodeRest();
ModelMapper modelMapper = new ModelMapper();
BarcodeDto barcodeDto = modelMapper.map(barcodeDetails, BarcodeDto.class);
BarcodeDto createdBarcode = barcodeService.createBarcode(barcodeDto);
returnValue = modelMapper.map(createdBarcode, BarcodeRest.class);
return returnValue;
}
createBarcode方法实现:
public BarcodeDto createBarcode(BarcodeDto barcode) {
ModelMapper modelMapper = new ModelMapper();
if (barcodeRepo.findByBarcode(barcode.getBarcode()) != null)
throw new ServiceException("Barcode value already exists.");
BarcodeEntity barcodeEntity = modelMapper.map(barcode, BarcodeEntity.class);
BarcodeEntity storedBarcode = barcodeRepo.save(barcodeEntity);
BarcodeDto returnValue = modelMapper.map(storedBarcode, BarcodeDto.class);
return returnValue;
}
问题内容: 我正在尝试使用Java将数据插入mysql数据库。我正在使用以下代码从数据库中获取数据,并且工作正常。 为了插入数据,我尝试了上面的代码,仅替换了 与 但是它显示出一些错误。您能告诉我代码中的问题在哪里吗? 谢谢 :) 问题答案: 如果您的主键是自动递增,则可以尝试此操作;
问题内容: 我创建了一个数据库名称movielibrarysystem,其中有3个表。 分别是类型,发布者和电影...现在1个发布者可以有很多电影,而1个电影则有很多类型..在movie表中,发布者ID和typeid都充当外键。 我的问题是,如何在电影表中插入数据…我已经将数据插入到发行商和类型表中,但是我无法插入电影表中。 问题答案: 这就是你要做的。首先,发行人与电影之间的关系是一对多的-
问题内容: 当我尝试使用此查询时,我收到一条错误消息,指出Perameter电子邮件不存在,我确定变量:email,login_pass,payment_method,operateur是有效的并且存在。 我尝试删除引号,但我得到了 您的Sql语法有错误,请在第1行的’:email,:login_pass,:payment_method,:avecpuce)’附近查看与您的SQL Server对应
问题内容: 当前,当通过print_r()输出时,我有一个类似于以下内容的数组; 我想将此数据插入到一个表中,每个元素值都属于其各自的字段。 目前,我的php代码如下所示 注意:R_ID不是此表中的主键。 有人可以帮助我了解如何应对这种情况吗?感谢您的阅读和帮助! 问候。 问题答案: 我会避免对每个条目进行查询。
我在房间使用关系中添加了一对多关系。我引用这篇文章是为了编写以下房间关系代码。 这篇文章讲述了如何从数据库中读取值,但将实体存储到数据库中会导致用户ID为空,这意味着这两个表之间没有关系。 我不确定在具有用户ID值的情况下,将用户和宠物列表插入数据库的理想方法是什么。 1)用户实体: 2) 宠物实体: 3)用户带宠物POJO: 现在,为了从DB中获取记录,我们使用以下DAO: 编辑 我已创建此问题
我正在尝试使用Pig将HDFS中的文件中的数据复制到Cassandra中的表中。但在将数据存储在Cassandra中时,作业失败,出现空指针异常。有人能帮我吗? 用户表结构: 创建表用户(user\u id text主键、age int、第一个文本、最后一个文本) 我的猪脚本 > A=加载“/用户/hduser/用户。txt“使用PigStorage(',')作为(id:chararray,age