我们正在针对现有数据库编写一个新应用程序。我正在使用 Spring Data JPA,只是做了一个
MyRepository.save()
在我的新实体上,使用
MyRepository extends CrudRepository<MyThing, String>
我在日志中注意到 hibernate 在插入之前执行了 Select,并且它们花费了很长时间,即使在使用索引时也是如此。
我在这里搜索过这个, 我找到的答案 通常与 Hibernate 相关。我是 JPA 的新手,看起来 JPA 和 Hibernate 紧密地交织在一起,至少在 Spring Data 的上下文中使用它时是这样。链接的答案建议使用 Hibernate persist(),或者以某种方式使用可能来自 entityManager 的会话?我不必直接对会话或实体管理器或任何 Hibernate API 做任何事情。到目前为止,我已经在我的存储库中使用 save() 和几个 @Query 完成了简单的插入。
原文由 user26270 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是您使用 Spring Data 存储库使用的 Spring SimpleJpaRepository 的代码:
它执行以下操作:
链接到 Spring Data 文档
因此,如果您的实体之一的 ID 字段不为空,Spring 将使 Hibernate 进行更新(因此之前进行 SELECT )。
您可以通过同一文档中列出的 2 种方式覆盖此行为。一种简单的方法是让您的实体实现持久化(而不是序列化),这将使您实现方法“isNew”。