更新/保存实体列表的最佳方式是什么?



我有一个新的/分离实体的列表,其中一些可能已经存在于数据库中,但我不知道先验哪些。我想保存这个列表中的实体,以便

  • 现有实体被更新(实体的身份基于一个自然id,不是主键))
  • 新实体被持久化

最自然/最习惯/最有效的方法是什么呢?

  • Spring Data JPA
  • 普通JPA/Hibernate

对于有两个列表的场景,我建议如下:一个包含新实体,另一个包含存储实体,但存储实体没有填充@Id字段。

创建一个repo方法,从DB中加载每个现有实体,例如Optional<EntityType> findByFooAndBar(String foo, String bar)。更新这些加载的中的字段从现有实体列表中缺少@Id的实体中删除。添加这些read &将实体更新到新实体列表。

则Spring Data JPA和plain JPA使用respository.saveAll(collectionOfEntities)。它更新现有实体并创建新实体。

如果您控制了DB,则废弃当前的PK,并用由自然键元素组成的候选键替换它。想必它们是独一无二的。然后一个简单的saveAll,新的和现有的可以留给JPA/Hibernate。

最新更新