Наиболее распространенной, вероятно, является проблема выбора n + 1 , когда отложенная загрузка коллекции приводит к попаданию в БД с n + 1 отдельными запросами вместо одного запроса на соединение.
Противоядие от таких вопросов - здравый смысл :-) Я считаю, что все соответствующие источники (прежде всего Hibernate ссылка ) обсуждают это (и другие связанные) проблемы, а также решения и обходные пути.Короче говоря, вы не должны слепо копировать рецепты из кулинарной книги - измеряйте производительность своего кода и настраивайте его соответствующим образом.Если вы видите слишком много выполненных выборок, вы можете выборочно переключаться с отложенной загрузки на присоединение или выборочный выбор стратегии для этого конкретного свойства / класса / запроса.(Обратите внимание, что оба из них имеют свои потенциальные недостатки, поэтому снова измерение производительности является ключевым.)
Другая, более редкая, проблема возникает, когда код клиента зависит от фактического типа объекта / свойства(например, проверяя его с помощью instanceof
. Такой код ломается, если он встречает прокси-объект, который не является экземпляром конкретного класса, за который он выступает. Однако, в любом случае, это не лучшая идея для написания такого кода, и он долженочень редко бывает необходимо. Однако иногда он наследуется устаревшим кодом, что вызывает конфликт, который может быть трудно обойти.