Я изучаю JPA, я обнаружил, что у нас есть некоторые функции, которые уже присутствуют в Jparepository, такие как save, saveAll, find, findAll и т. Д. c. но нет ничего похожего на обновление,
Я столкнулся с одним сценарием, когда мне нужно обновить таблицу, если значение уже присутствует, в противном случае мне нужно вставить запись в таблицу.
Я создал
@Repository
public interface ProductInfoRepository
extends JpaRepository<ProductInfoTable, String>
{
Optional<ProductInfoTable> findByProductName(String productname);
}
public class ProductServiceImpl
implements ProductService
{
@Autowired
private ProductInfoRepository productRepository;
@Override
public ResponseMessage saveProductDetail(ProductInfo productInfo)
{
Optional<ProductInfoTable> productInfoinTable =
productRepository.findByProductName(productInfo.getProductName());
ProductInfoTable productInfoDetail;
Integer quantity = productInfo.getQuantity();
if (productInfoinTable.isPresent())
{
quantity += productInfoinTable.get().getQuantity();
}
productInfoDetail =
new ProductInfoTable(productInfo.getProductName(), quantity + productInfo.getQuantity(),
productInfo.getImage());
productRepository.save(productInfoDetail);
return new ResponseMessage("product saved successfully");
}
}
как вы можете видеть, я могу сохранить запись, если запись новая, но когда я пытаюсь сохранить запись, которая уже присутствует в таблице, это дает мне ошибку, связанную с нарушением первичного ключа, которое очевидно. Я несколько раз проверил, мы можем выполнить обновление, создав объект entitymanager или запрос jpa, но что, если я не хочу использовать их оба. есть ли другой способ сделать это?
update Я также добавил экземпляр EntityManager и попытался объединить код
@Override
public ResponseMessage saveProductDetail(ProductInfo productInfo)
{
Optional<ProductInfoTable> productInfoinTable =
productRepository.findByProductName(productInfo.getProductName());
ProductInfoTable productInfoDetail;
Integer price = productInfo.getPrice();
if (productInfoinTable.isPresent())
{
price = productInfoinTable.get().getPrice();
}
productInfoDetail =
new ProductInfoTable(productInfo.getProductName(), price, productInfo.getImage());
em.merge(productInfoDetail);
return new ResponseMessage("product saved successfully");
, но без ошибок, без выполнения операторов обновления в журнале , какие-либо возможные причины для этого? }