如何在 Spring JPA 环境中保持较小的持久性上下文?
原因:我知道通过保持较小的持久性上下文,将会显着提升性能!
主要问题领域是:
@Transactional
void MethodA() {
WHILE retrieving next object of 51M (via a stateless session connection) DO
get some further (readonly) data
IF condition holds THEN
assessment = retrieve assession object (= record from database)
change assessment data
save the assessment to the database
}
通过在这个问题域中的实验,我知道每 250 次迭代清理持久性上下文时,性能会好很多。
当我将这些行添加到代码中时,每 250 次迭代:
@PersistenceContext
private EntityManager em;
WHILE ...
...
IF counter++ % 250 == 0 THEN
em.flush()
em.clear()
}
然后我收到诸如“无法可靠地执行刷新操作”之类的错误。
我试图将主要事务设置为只读,并将评估保存部分设置为“事务需要新”,然后出现“在分离实体上操作”之类的错误。很奇怪,因为我从不重新审视一个开放的实体。
那么,我怎样才能使持久性上下文保持小呢?已经尝试了10s种方法。非常感谢您的帮助。