Ленивая загрузка с весенней HibernatedAosupport?
-
23-09-2019 - |
Вопрос
Приветствуются, что я разрабатываю не внесение в пользу с использованием Spring+Hibernate. У меня вопрос, как HibernatedAosupport обрабатывает ленивую загрузку, потому что после вызова Do Dao сеанс закрыт.
Взгляните на следующий код psuedo:
Дао как:
CommonDao extends HibernateDaoSupport{
Family getFamilyById(String id);
SubFamily getSubFamily(String familyid,String subfamilyid);
}
Доменная модель похожа на:
Family{
private List<SubFamily> subfamiles;
public List<SubFamily> getSubFamiles();
}
SubFamily{
private Family family;
public Family getFamily();
}
В приложении я получаю DAO из приложения-контекста и хочу следить за операциями. Возможно ли это сделать с ленивой загрузкой, потому что AFAIK после каждого метода (getFamilyByid (), GetSubfamily ()) сеанс закрыт.
CommonDAO dao=//get bean from application context;
Family famA=dao.getFamilyById(familyid);
//
//Do some stuff
List<SubFamily> childrenA=fam.getSubFamiles();
SubFamily asubfamily=dao.getSubFamily(id,subfamilyid);
//
//Do some other stuff
Family famB=asubfamily.getFamily();
Решение
Мой вопрос заключается в том, как HibernatedAosupport обрабатывает ленивую загрузку, потому что после вызова Дао сеанс закрыт.
DAOS не создает/не закрывает сеанс для каждого вызова, они не несут ответственности за это, и это обычно делается с использованием "Открыть сессию в виде«Паттерн (весна предоставляет фильтр или перехватчик для этого). Но это для веб -приложений.
В приложении Swing одно решение - использовать Длиная сессия. Анкет Вам придется решить четко определенные точки, чтобы закрыть сеанс, чтобы выпустить память. Для небольших приложений это обычно просто и будет работать. Для более крупных (т.е. приложения реальной жизни) правильное решение состоит в том, чтобы использовать один сеанс на кадр/внутренний кадр/диалог. Это сложнее управлять, но будет масштабироваться.
Некоторые темы, которые вы можете прочитать:
Другие советы
на гораздо больше времени и расследования кажется, это «нормальное» поведение.Ошибка не имеет значения и выбросина как можно лучше;Это даже не может быть фактической ошибкой в реальной жизни.Похоже, офисные клиенты делают некоторые взлома, которые делают то, что они делают.