Относительно Hibernate LazyInitialization Ошибка - PullRequest
0 голосов
/ 08 февраля 2012

Я использую transactions на EJB2.0 слое и оттуда делаю вызов на DAO слое, в котором я делаю вызовы гибернации в db.

У меня сейчас проблема в том, что hibernate делает несколько звонков в базу данных, потому что я установил lazy="false", сейчас я попытался изменить lazy="true", но теперь получаю нашу собственную:

org.hibernate.LazyInitializationException: не удалось инициализировать прокси - сеанс-владелец был закрыт

сообщение об ошибке.

Я провел некоторое исследование по SO и обнаружил, что решение может быть

 <prop key="hibernate.default_batch_fetch_size">30</prop>
 <prop key="hibernate.jdbc.fetch_size"></prop>

, и мой вопрос заключается в том, какой будет размер fetch_size по умолчанию, и если это правильный способ решения этой проблемы,

Все, что я хочу сделать, это убедиться, что приложение не выполняет несколько вызовов к базе данных для выполнения всех этих N запросов, так как в настоящее время навигация между страницами очень трудна и делает приложение очень медленным, как на каждой странице.щелкните, есть N запросов, которые выполняются в фоновом режиме, и это увеличивает время загрузки приложения.

Обновление

Вот как я настраиваю транзакции:

 * @hibernate.class table="SCHEDULE_ENTRY" discriminator-value="task" lazy="true"
 * @hibernate.discriminator column="KIND" length="4"

Буду очень признателен за любые предложения по улучшению производительности hibernate.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Доступ к члену объекта перед закрытием сеанса.Вот главная проблема.

0 голосов
/ 08 февраля 2012
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed

Вы получаете это исключение, когда пытаетесь получить доступ к члену объекта (прокси), который еще не был инициализирован И этот объект не привязан к сеансу (отсоединен). Вы должны сначала избавиться от этой проблемы, прежде чем думать об изменении размера пакета.

Чтобы избавиться от этой проблемы, убедитесь, что все свойства, к которым вы хотите получить доступ, инициализированы. Это зависит от конфигурации вашей транзакции / сеанса, где вы можете использовать отложенную загрузку. Будет полезно, если вы опубликуете конфигурацию транзакции / сеанса.

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

Взгляните на здесь .

Я надеюсь, что смогу помочь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...