Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройка Hibernate через Spring, could not initialize proxy 
V
    Опции темы
XEugene
Дата 13.2.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 1.1.2008

Репутация: 1
Всего: 2



Настраиваю Hibernate средствами Spring.

При запуске теста для DAO-бина получаю иксепшен:
Код

Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed


Хотя открытие сессии должен обеспечивать сконфигурированный SessionFactory.
Вот конфиг spring-hibernate.xml, в котором все настраивается
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@//one.ios.icl:1521/orcl"/>
        <property name="username" value="username"/>
        <property name="password" value="password"/>
    </bean>

    <bean id="mySessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
            <list>
                <value>ru/sdf/model/templateDao.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <value>hibernate.dialect=org.hibernate.dialect.OracleDialect</value>
        </property>
    </bean>

    <bean id="hibernateTemplate"
            class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
    </bean>


    <bean id="templateDao" class="ru.sdf.model.hibernate.TemplateDao">
        <property name="hibernateTemplate">
            <ref bean="hibernateTemplate"/>
        </property>
    </bean>

</beans>


Код теста
Код

public class Test {

        public static void main(String[] args) {

        Resource resource = new FileSystemResource(
            "./src/resources/spring-hibernate.xml");
        BeanFactory factory = new XmlBeanFactory(resource);

        Template template = new Template ();
        template.setTemplateName("name");

        TemplateDao templateDao = (TemplateDao) factory.getBean(
            "templateDao");
        templateDao.saveOrUpdate(template);

    }
}


TemplateDAO.java
Код

public class TemplateDAO {

    private HibernateTemplate hibernateTemplate;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public HibernateTemplate getHibernateTemplate() {
        return hibernateTemplate;
    }

    public Template getTemplate(final String id){
        HibernateCallback callback = new HibernateCallback() {
            public Object doInHibernate(Session session)
                throws HibernateException,SQLException {
                return session.load(Template.class, id);
            }
        };
        return (Template) hibernateTemplate.execute(callback);
    }


    public void saveOrUpdate(final Template template){
        HibernateCallback callback = new HibernateCallback() {
            public Object doInHibernate(Session session)
                throws HibernateException,SQLException {
                session.saveOrUpdate(template);
                return null;
            }
        };
        hibernateTemplate.execute(callback);
    }
}


Источник информации - эта статья.
PM MAIL   Вверх
AntonSaburov
Дата 13.2.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



У тебя сообщение говорит о том, что сессия для Hibernate уже закрылась. Т.е. объект как бы уже "оторван" от базы (от сессии). У него с ней связи нет. 
Думаю, что объект имеет коллекцию/связь в другими объектами. Т.к. коллекция lazy, то она будет загужаться только тогда, когда это действительно потребуется. И видимо это требуется уже после "отрыва" объекта то сессии.
PM MAIL WWW ICQ   Вверх
XEugene
Дата 13.2.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 1.1.2008

Репутация: 1
Всего: 2



Класс Template пока единственный в моей модели,  поэтому связей у него нет.  Хотя ошибка вроде действительно говорит о том, что сессия закрылась.  Только вот где и когда она была открыта...




Это сообщение отредактировал(а) XEugene - 16.2.2009, 20:31
PM MAIL   Вверх
XEugene
Дата 15.2.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 1.1.2008

Репутация: 1
Всего: 2



Проделал всё то же самое дома - работает.
Но сейчас я использовал org.springframework.jdbc.datasource.DriverManagerDataSource вместо org.apache.commons.dbcp.BasicDataSource, поскольку мне было лень собирать все необходимые для BasicDataSource либы.

Так что возможно проблема была как раз в них. Правда,  датасорс у меня всё же создавался и SessionFactory тоже...

Добавлено через 11 минут и 24 секунды
А может лучше использовать JNDI - датасорс,  предоставляемый томкатом?

Добавлено через 13 минут и 54 секунды
То есть org.springframework.jndi.JndiObjectFactoryBean.

Это сообщение отредактировал(а) XEugene - 15.2.2009, 00:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.