У меня есть постоянный объект (сеанс) внутри транзакции (управляемый менеджером объекта).
Я делаю некоторые изменения в этой сущности или связанных (достигаются с помощью 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
}
}
}
Что произойдет с созданными объектами (сессией и связанными с ними тоже), когда после сброса я установлю для сеанса значение null: будут ли они сохранены? освободит ли ГХ память? и когда я перезагружаю его (вместе с находкой), EM перезагружает его с нуля (не используя предыдущий)?