【发布时间】:2017-06-05 02:56:36
【问题描述】:
用例是:
- 创建大量新实体并将它们保存在数据库中的单个事务中
我能找到使用 JPA/Hibernate 的唯一有效解决方案是执行以下步骤。原因是休眠将实体保留在一级缓存中直到事务结束。
- 创建一个新实体
- 强制快速刷新()
- 分离实体
这样做的开销是
- 您需要将 entityManager/sessionFactory 注入业务逻辑,并管理实体的刷新和分离
- 您需要在每次插入后强制进行低效冲洗
真正的期望是 JPA 或至少 Hibernate 会公开某种功能以快速创建实体并在不对其进行管理的情况下将其持久化。
其他解决方案:
- 使用 JDBC 或 JdbcTemplate,但您必须为实体编写自己的插入操作
所以问题是:是否有可能同时保持和分离,或者更好地保持而不被管理?
【问题讨论】:
-
您是否研究过批量插入? vladmihalcea.com/2015/03/18/…
-
您可以实现自己的
saveAndDetach方法。请参阅官方文档中的adding custom behaviour to repositories。
标签: hibernate jpa spring-data-jpa