gpt4 book ai didi

java - 在save()之前如何停止Spring数据JPA进行SELECT?

转载 作者:行者123 更新时间:2023-12-02 00:49:46 24 4
gpt4 key购买 nike

我们正在针对现有数据库编写一个新应用。我正在使用Spring Data JPA,只是做一个

MyRepository.save() 


在我的新实体上,使用

MyRepository extends CrudRepository<MyThing, String>


我在日志中注意到,hibernate在插入之前进行Select操作,即使使用索引,它们也要花费很长时间。

我在这里搜索过,通常 answers I've found通常与Hibernate有关。我对JPA还是很陌生,至少在Spring Data上下文中使用它时,似乎JPA和Hibernate紧密地交织在一起。链接的答案建议使用Hibernatepersist(),或者以某种方式使用会话(可能是来自entityManager)?我不必对会话或entityManagers或任何Hibernate API直接做任何事情。到目前为止,我在存储库中使用save()和几个@Query完成了简单的插入。

最佳答案

这是通过使用Spring Data存储库使用的Spring SimpleJpaRepository的代码:

@Transactional
public <S extends T> S save(S entity) {

if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}


它执行以下操作:


默认情况下,Spring Data JPA检查给定实体的标识符属性。如果标识符属性为null,则该实体将被假定为新实体,否则为非新实体。


Link to Spring Data documentation

因此,如果您的实体之一的ID字段不为null,Spring将使Hibernate进行更新(因此在执行SELECT之前)。

您可以通过同一文档中列出的2种方式覆盖此行为。一种简单的方法是使您的实体实现Persistable(而不是Serializable),这将使您实现方法“ isNew”。

关于java - 在save()之前如何停止Spring数据JPA进行SELECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com