我有如下控制器
@RequestMapping(value = "/update/{tableId}", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity updateItemQty (@PathVariable Long tableId, @RequestBody AddItemsRequestBody requestBody,
HttpServletRequest request){
try {
String addedBy = getUserName(request);
Float ItemQuantity = requestBody.getItemQuantity();
LocalDateTime dateTimeAdded = LocalDateTime.now();
String subId = requestBody.getItemSubId();
ArrayList<ItemAdditionDetails> updatedAdditionDetails = new ArrayList<>();
ItemAdditionDetails newItemAdditionDetails = new ItemAdditionDetails();
newItemAdditionDetails.setIncreamentCount(ItemQuantity);
newItemAdditionDetails.setAddedDateTime(dateTimeAdded);
newItemAdditionDetails.setAddedBy(addedBy);
updatedAdditionDetails.add(newItemAdditionDetails);
// Here i am fetching a JSON-B column that returns an array of json objects from Postgress DB
ItemInventoryService.findByItemSubId(subId).getItemsInventoryAdditionDetails().forEach((el) -> {
updatedAdditionDetails.add(el);
});
itemInventoryService.updateItemsAdditionDetails(subId,updatedAdditionDetails);
return new ResponseEntity("Updated", HttpStatus.CREATED);
}catch (Exception ex){
return new ResponseEntity(ex, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
如果我移除/注释掉
ItemInventoryService.findByItemSubId(subId).getItemsInventoryAdditionDetails().forEach((el) -> {
updatedAdditionDetails.add(el);
});
我不将获取的结果添加到新的updatedAdditionDetails(类型为ArrayList)中时,数据库会成功更新。 否则我会得到以下错误:
ERROR: column \"itemsinventory_addtion_details\" is of type jsonb but expression is of type record Hint: You will need to rewrite or cast the expression. Position
在我的Repository中有以下查询:
@Transactional
@Modifying
@Query(value = "UPDATE items_inventory SET itemsinventory_addtion_details = :updatedAdditionDetails WHERE item_subid = :subId", nativeQuery = true)
Integer updateItemsAdditionDetails(@Param("subId") String subId, @Param("updatedAdditionDetails") List<ItemAdditionDetails> updatedAdditionDetails);
我尝试了JPA的方法,如下:
@Query(value = "UPDATE ItemsInventory items SET items.itemsInventoryAdditionDetails = :updatedAdditionDetails WHERE items.itemSubId = :subId")
很不幸,这也导致了相同的错误。 非常感谢任何帮助。 提前致谢。