gpt4 book ai didi

java - EntityManager 与 Spring Data 存储库的显式使用

转载 作者:行者123 更新时间:2023-11-29 06:58:44 25 4
gpt4 key购买 nike

我什么时候需要在我的服务方法中明确求助于 EntityManager 方法(我对 clear()、close()、flush()、detach() 特别感兴趣,这些方法还可以与 Spring Data 存储库一起使用?

我最感兴趣的是对该主题的一般见解。假设在一个应用程序中我发现了这个:

    for ( MyEntity myEntity: entities) {
...some logic here
mySpringDataRepo.save ( myEntity );
}
entityManager.flush ();
entityManager.clear ();

我发现这样使用 EntityManager 是合理的,因为内存可能因实体而过载。然而,在另一个代码片段中:

    mySpringDataRepository.save(entity);
entityManager.detach(entity);

是否需要显式分离实体? Spring Data 不是自己处理吗?

我还找到了这篇文章: http://newscentral.exsees.com/item/de38b01b7a9f794a124e2c72b97d1103-c5533957a4140e3c51e7d295ec840d08

这让我更加困惑。

至于 close() 方法,我认为在 EE 环境中没有必要调用它。我说得对吗?

PS:我的配置很主流:JpaTransactionManager/LocalContainerEntityManagerFactoryBean

最佳答案

我认为存储库客户端应该永远、永远与比存储库本身更低层的 API 交互。与数据访问 API 交互是存储库应该抽象的内容。

如果你仔细想想,它会引发很多问题:

  • 模拟存储库来测试服务已经不够了,您还必须模拟 EntityManager
  • 为什么服务应该首先知道 EntityManager
  • 如果您决定切换到基于 JDBC 的存储库实现,该怎么办?您还必须触摸该服务的代码。

所以答案很简单:确定您的实际用例是什么。如果标准的 Spring Data 机制(查询方法、执行谓词)不允许开箱即用地建模,请添加自定义实现,例如描述 here并在存储库内部实现该功能。不,em.detach() 不是用例。

关于java - EntityManager 与 Spring Data 存储库的显式使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29622124/

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