繁体   English   中英

如何使用 Spring Data Jpa 实现保存或更新功能?

[英]How can I implement a Save Or Update function using Spring Data Jpa?

我正在使用 Spring Data JPA 将记录保存到我的数据库中。 这是我正在使用的方法:

@Override
public void persistOrder(final Order order) {
    orderRepository.save(order);
}

和我的存储库:

@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
    Optional<Order> findByOrderId(UUID orderId);
}

我想修改它,以便保存或更新。 这是我到目前为止:

@Override
public void saveOrUdpate(final Order order) {
  orderRepository.save(order);
  long id = orderRepository.findByOrderId(order.get()).getId();
  orderRepository.deleteById(id);
  orderRepository.save(order);
}

我有几个问题 -
#1 这是不好的做法(删除然后重新插入)吗?
#2 如果我使用 hibernate 实现我的 repo,那么 hibernate saveOrUpdate(..) 会在幕后做同样的事情吗?
#3 您知道如何仅使用普通的 Spring Data Jpa 来实现这一目标吗?

谢谢 :)

更新::
好的,感谢评论,我决定添加一个单独的更新方法! 我觉得这个更好看!

 @Override
 public void updateOrder(Order order) {
    long id = orderRepository.findByOrderId(order.get().getId());
    order.setId(id);
    orderRepository.save(order);
}

关于 Spring Data JPA 的 save(..) 方法默认执行 upsert 的观点很好。 但是,不幸的是,在我正在处理的项目中,主键是自动生成的。 这意味着每当对现有记录执行 save(..) 以更新它时,都会创建一个新记录! 这就是为什么我在这里明确设置 id 以避免这种情况发生!

我还在实体类中的 orderId 列(不是主键)中添加了 eclipse-link 库 @Index 注释,以加快更新方法的 findByOrderId!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM