我在事务中有一个持久的实体(会话)(由实体管理器管理)。
我对该实体或相关实体进行了一些更改(使用getter进行了更改)。
与会话对象相关的对象数量可能会很大,因此我想保存当前对象(以及所有与级联相关的对象),释放内存并重新加载实体(所有相关对象都被延迟加载)以继续工作
这就是我打算工作的方式
@TransactionAttribute(TransactionAttributeType.REQUIRED)
function Session manageSession(Long sessionId) {
Session session = null;
if (sessionId == null) {
session = new Session()
.....Setting fields...
em.persist(session);
} else {
session = em.find(Session.class,sessionId);
}
List<Long> objectIdToBeLinked = getRemainingUnlinkedObj();
for (Long id : objectIdToBeLinked) {
createRelatedObj(session, id) //here activities the create more and more objs to be linked to session)
if (checkMemory) { //where checkmemory return true if we have no more mem space
em.flush;
Long sessionId = session.getId();
session = null;
manageSession(sessionId)M
}
}
}
在刷新后,我将session设置为null时,创建的实体(会话和相关实体)会发生什么情况:它们将被保存吗? GC会释放内存吗?当我重新加载它(使用查找)时,EM是否从头开始重新加载它(不使用前一个)?