当前位置: 首页 > 知识库问答 >
问题:

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

单于奇略
2023-03-14

我正在使用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实现回购,那么hibernate saveOrUpdate(..)在引擎盖下做同样的事?
#3您是否知道如何使用简单的Spring数据JPA来实现这一点?

谢谢:)

共有1个答案

充普松
2023-03-14

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

 @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以避免这种情况发生!我还在entity类中的orderId列(而不是主键)中添加了eclipse-link library@index注释,以加快更新方法的findbyorderID!

 类似资料:
  • 本文向大家介绍uni-app如何实现增量更新功能,包括了uni-app如何实现增量更新功能的使用技巧和注意事项,需要的朋友参考一下 都知道,很多APP都有增量更新功能,Uni APP也是在今年初,推出了增量更新功能,今天我们就来学习一波。 当然,很多应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对增量更新大多持排斥态度,特别是apple。所以拥有增量更新的app,需要注意以下几点:

  • 我正在使用100个实体(使用JHipster)设置一个新的Spring Boot API,我的问题是:鉴于我有一组存储库层方法,我希望我的所有存储库都能够调用这些方法。 我已经尝试制作所有接口来扩展('RepositoryQuery'是我默认的自定义接口名称后缀),然后使用特定于实体的类。请注意,所有的类扩展了一个泛型实现类,名为。 请注意,给定正则表达式中的“.*”代表我的持久实体集中的任何实体

  • 问题内容: 我正在尝试使用Hibernate插入或更新大数据。我有一个包含350k对象的列表,当我使用Hibernate时,要花费数小时才能插入所有数据。 我正在使用以下代码进行此操作。我的开发环境是JDK1.4和Oracle数据库。 我正在使用批处理更新,还设置了属性50,但这并没有帮助。 我的对象与另一个对象具有一对一的关系,因此在这种情况下使用StatelessSession可能会出现问题。

  • 我的@cacheable方法有下一个签名: 该过滤器使用reporisoty,以limit作为分页参数,返回实体列表。我正在尝试在向系统添加实体时更新缓存: java.lang.ClassCastException:不能将com.java.domain.Entity强制转换为java.util.List

  • 如何使用Spring Rest Controller和Spring Data JPA仅更新从@刚体传递的实体属性? 员工实体: 服务类方法: 请求体: Hibernate更新查询: Spring Data JPA正在尝试将company_id设置为空以进行更新,即使我没有将其传递给请求体?但是如果我从数据库中得到实体,使用employee_id传递,然后如果我试图保存(),那么它的工作正常。 我想