Исправьте меня, если что-то не так.DAO, Spring и Hibernate
Теперь, когда мы используем Spring DAO для шаблонов ORM, когда мы используем атрибут @Transactional, , у нас нет контроля над транзакцией и/или сеансом, когда метод вызывается извне, а не внутри метода.
Lazy loading сохраняет ресурсы - меньше запросов к db, меньше памяти, чтобы сохранить все коллекции, извлеченные в памяти приложения.
Итак, если lazy = false, тогда все будет выбрано, все связанные коллекции, что не эффективно, если в связанном наборе есть 10 000 записей.
Теперь у меня есть метод в классе DAO, который должен вернуть мне объект User. В нем есть коллекции, которые представляют связанные таблицы базы данных. Мне нужно получить объект по id, а затем запросить его коллекции.
Hibernate «не удалось лениво инициализировать сбор». Исключение возникает, когда я пытаюсь получить доступ к связанной коллекции, которую возвращает этот метод DAO.
Объясните пожалуйста, что такое обходной путь здесь?
Обновление: Хорошо, позвольте мне спросить вас об этом. DAO - абстрактный уровень, поэтому метод getUserById (Integer id) должен возвращать объект.
Что делать, если в некоторых случаях мне нужны эти связанные коллекции объекта User, а в другой ситуации мне нужны эти коллекции.
Есть только два пути: 1) ленивы погрузочные = ложь 2) создавать различные методы: getUserByIdWithTheseCollections(), getUserByIdWithOtherCollections() и внутри этих методов используют свой подход?
Я имею в виду, что есть только два пути и ничего лучше?
Обновление 2: Объясните пожалуйста, что даст мне явное использование SESSIONFACTORY? Как это выглядит на практике? Мы создаем экземпляр объекта DAO, , затем вводим его фабрикой сеансов, и это означает, что два последовательных метода вызова для DAO будут выполняться в рамках одной транзакции? Мне кажется, что DAO отделяется от классов, которые его используют!
Логика и транзакции заключены в DAO, правильно?
@ Konrad Garus См. Мой постскриптум вопроса, здесь текст менее читабельен, поэтому я прошу вас там. – EugeneP
@EugeneP См. Обновленный ответ. –