我什么时候需要明确地使用EntityManager方法(我对我的Service方法中的clear(),close(),flush(),detach()特别感兴趣,这些方法还可以使用Spring Data repos?
我最感兴趣的是对该主题的一般见解。 让我们在一个应用程序中说我发现了这个:
for ( MyEntity myEntity: entities) {
...some logic here
mySpringDataRepo.save ( myEntity );
}
entityManager.flush ();
entityManager.clear ();
我发现EntityManager的这种使用是合理的,因为内存可以用实体重载。 但是,在另一个代码段中:
mySpringDataRepository.save(entity);
entityManager.detach(entity);
是否有必要明确分离实体? Spring Data是否自行处理它?</ p>
我也发现这篇文章: http://newscentral.exsees.com/item/de38b01b7a9f794a124e2c72b97d1103-c5533957a4140e3c51e7d295ec840d08
让我更加困惑。
对于close()方法,我认为没有必要在EE环境中调用它。我是对的吗?
PS:我的配置非常主流:JpaTransactionManager / LocalContainerEntityManagerFactoryBean
答案 0 :(得分:5)
我认为存储库客户端永远不会与低层API进行交互而不是存储库本身。与数据访问API交互是存储库应该抽象的内容。
如果你考虑一下,就会引发很多问题:
EntityManager
。EntityManager
?所以答案很简单:确定你的实际用例是什么。如果标准的Spring数据机制(查询方法,执行谓词)不允许对开箱即用的模型进行建模,请添加自定义实现,例如:描述了here并在内部实现了功能。不,em.detach()
不是一个用例。
答案 1 :(得分:1)
您不必担心实体经理。如果要手动刷新调用存储库中的flush方法,或者如果逐个保存实体则saveAndFlush。我个人并不打扰,我的存储库方法调用来自事务服务,当该方法执行时,提交最终会执行刷新。
顺便说一下,您不需要遍历集合来保存每个实体。只需对集合进行保存即可。