2015-07-27 2 views

ответ

2

Прокси генерируются так, что Hibernate может перехватывать вызовы в неинициализированные ассоциации и пытаться их получать по требованию.

LazyInitializationException - код запаха. Вы получаете его, потому что вы не правильно инициализировали все обязательные ассоциации сущностей до закрытия Session. Переключение на ассоциации EAGER также является bad idea, потому что политика выборки является ответственностью за запрос.

Попробуйте уменьшить количество ассоциаций, если они вам не нужны, и вместо этого используйте запросы. Вы можете создать приложение с несколькими ассоциациями (зеркалирование отношений FK), и вместо ассоциаций «один ко многим» вы можете использовать методы DAO.

Что касается этого заявления:

Я хотел бы сохранить отношения родителя/ребенка, но когда я анализирую через родительский объект, я не хочу получать дочерние элементы.

Если вы сохраняете связь между родителями и детьми, вам всегда нужно загрузить ассоциацию до ее использования. Попытка удалить прокси-серверы звучит так, будто вы пытаетесь взломать решение, а не правильно разрабатывать свои уровни приложений.

Так что прокси - это хорошо, и они позволяют улучшить производительность приложения, потому что вы не всегда получаете все ассоциации при попытке получить доступ к корневому объекту.

Чтобы отключить прокси вы просто должны аннотировать объекты с Proxy аннотацию:

@Proxy(lazy=false) 
+0

http://in.relation.to/2006/01/26/persistent-collections-are-a-feature/ –

+0

В первую очередь спасибо .. Вот моя забота ... Вы сказали: «Вместо ассоциаций« один-ко-многим »вы можете иметь методы DAO». Без одной из многих ассоциаций я не смогу использовать явные объединения для сложных запросов .... С ассоциацией «Один на много», «Ленивая инициализация», мы анализируем весь объект с помощью Jax-B, к нему будет обращен дочерний элемент и он будет извлечен .., что не нужно и потеря производительности. Также @Proxy (lazy = false) не приносит прокси, но он извлекает весь дочерний элемент. Это лишний раз и потеря производительности. Дайте мне знать, если у вас есть какие-либо предложения. – user1172766

+0

Ну, выборка объектов имеет смысл, когда вы планируете их модифицировать. В вашем случае проекция более уместна и всегда будет работать лучше. Вы можете написать переносимый natie-запрос, и вы можете получить только данные, необходимые для вашего варианта использования. –

Смежные вопросы