Java 从列表中对存储库进行差异更新

Java 从列表中对存储库进行差异更新,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,有没有什么奇特的方法可以在春季对行列表进行“差异”更新? 例如,我的数据库中有这样的行: A排 B排 C行 我获得了一套新的项目: A排 C行 D行 因此,我想要的是: A行(已更新,未删除和添加) 第C行(已更新,未删除和添加) D行(新增) 删除的B行 在这里,跟踪创建和修改日期至关重要。在春天有什么方便的方法来实现这一点吗 提前感谢您提供的任何提示 解决方案: 我还没有找到一个“好”的方法来做这件事。最后,我添加了带有@CreationTimestamp和@UpdateTime

有没有什么奇特的方法可以在春季对行列表进行“差异”更新? 例如,我的数据库中有这样的行:

  • A排
  • B排
  • C行
我获得了一套新的项目:

  • A排
  • C行
  • D行
因此,我想要的是:

  • A行(已更新,未删除和添加)
  • 第C行(已更新,未删除和添加)
  • D行(新增)
  • 删除的B行
在这里,跟踪创建和修改日期至关重要。在春天有什么方便的方法来实现这一点吗

提前感谢您提供的任何提示

解决方案:
我还没有找到一个“好”的方法来做这件事。最后,我添加了带有@CreationTimestamp和@UpdateTimestamp的日期字段(尽管后者可能是一个简单的日期/本地日期字段)。在上传一个新集合时,对于每一行,我都会检查存储库是否还没有这样的对象(必须通过比较除ID之外的所有字段来完成,因为ID是自动生成的,我需要通过值进行比较——幸运的是,我的系统中的每个值组合都是唯一的)。 如果是,则更新日期更改为当前日期。
完成后,我简单地删除了更新日期早于当前日期的实体。这不是一种奇特的方法,速度也很慢,但效果很好。

如果您使用的是实体,那么您可以使用Spring CRUD存储库。它们有一个名为save()的方法,该方法接收实体列表。如果任何实体的ID已经存在,存储库将对其进行更新,否则将在数据库中创建新记录

您可以查看Spring文档


请让我知道这篇文章是否对您有用。

如果您使用JPA的EntityManager,您可以使用
EntityManager.merge(yourEntity)
,如果id与您的数据库id不一致,此查询将添加新行,或者以其他方式更新您的字段


此外,还有来自Session(其hibernate SessionFactory)的常用方法,还有方法
Session.saveOrUpdate(yourEntity)

谢谢您的回复!但是,就我而言,这两种方法都不会删除新列表中未出现的行。如果我错了,请纠正我。谢谢你的回复!我广泛使用CRUD存储库,但方法save()不删除未出现在新列表中的行。如果希望包含删除功能,可能需要实现自己的功能…除非数据库表表示键值对…如果这是您可以检查此帖子的要点:With@CollectionTable JPA adds,删除或更新适当情况下的数据。“Spring”不执行数据持久化,JPA执行。定义JPA实体和持久性代码而不是表