Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring + Hibernate = lazy exception


Автор: vady 9.8.2007, 18:44
   Возникает lazy exception. 
Получаю класс А, обращаюсь к полю, которое связано с классом В и получаю exception.
Использую HibernateDaoSupport. 
На сколько я понял, то нужно настроить HibernateInterceptor, но не мойму, как...
Standalone приложение.


Код

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

<beans>

    <!-- DataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost/megashop</value></property>
        <property name="username"><value>root</value></property>
        <property name="password"><value>root</value></property>
    </bean>
    <!--***************************************************************************** -->


    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <value>User.hbm.xml</value>
                <value>Category.hbm.xml</value>
                <value>Product.hbm.xml</value>
                <value>Order.hbm.xml</value>
                <value>OrderLine.hbm.xml</value>
                <!-- Add list of .hbm.xml files here -->
            </list>
        </property>
        <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
          <!--  <prop key="hibernate.hbm2ddl.auto">update</prop>-->
            <prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
        </props>
        </property>
    </bean>
    <!--***************************************************************************** -->


    <!-- Hibernate transaction manager  ************************************* -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <!--***************************************************************************** -->

     <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
         <property name="sessionFactory">
           <ref bean="sessionFactory"/>
         </property>
    </bean>

    <bean id="productManager" class="org.springframework.aop.framework.ProxyFactoryBean">
         <property name="target"><ref bean="productManagerTarget"/></property>
         <property name="proxyInterfaces">
           <value>com.vady.skeleton.service.ProductManager</value>
         </property>
         <property name="interceptorNames">
           <list>
              <value>transactionManager</value>
           </list>
         </property>
     </bean>


    <!-- DAO beans     ************************************* -->
    <bean id="userDAO" class="com.vady.skeleton.dao.impl.HibernateUserDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="categoryDAO" class="com.vady.skeleton.dao.impl.HibernateCategoryDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="productDAO" class="com.vady.skeleton.dao.impl.HibernateProductDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="orderDAO" class="com.vady.skeleton.dao.impl.HibernateOrderDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!--***************************************************************************** -->


    <!-- Manager beans ************************************* -->
    <bean id="userManager" class="com.vady.skeleton.service.UserManagerImpl">
        <property name="dao" ref="userDAO"/>
    </bean>

    <bean id="productManagerTarget" class="com.vady.skeleton.service.ProductManagerImpl">
        <property name="dao" ref="productDAO"/>
    </bean>


    <!--***************************************************************************** -->

</beans>


Код

package com.vady.skeleton.dao.impl;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.vady.skeleton.dao.ProductDAO;
import com.vady.skeleton.model.Product;

import java.util.List;


public class HibernateProductDAOImpl extends HibernateDaoSupport implements ProductDAO {

    public void createProduct(Product product) {
        getHibernateTemplate().saveOrUpdate(product);
    }

    public Product getProduct(long id) {
        return (Product) getHibernateTemplate().load(Product.class, id);
    }

    public List getProductList() {
        return getHibernateTemplate().find("from Product");
    }

    public void updateProduct(Product product) {
        getHibernateTemplate().update(product);
    }

    public void deleteProduct(long id) {
        Product product = getProduct(id);

        getHibernateTemplate().delete(product);
    }
}


Код

package com.vady.skeleton.service;


import com.vady.skeleton.model.Product;
import java.util.List;


public interface ProductManager {

    void createProduct(Product product);

    Product getProduct(long id);

    List getProductList();

    void updateProduct(Product product);

    void removeProduct(Product product);
}

Автор: tux 9.8.2007, 18:58
Здесь есть рецепт - http://www.jroller.com/kbaum/entry/orm_lazy_initialization_with_dao.

Автор: vady 10.8.2007, 08:41
   Сделал по совету "Карла".
   Всё равно возникает lazy exception.
Ниже applicationContext.xml

Код

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

<beans>

    <!-- DataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost/megashop</value></property>
        <property name="username"><value>root</value></property>
        <property name="password"><value>root</value></property>
    </bean>
    <!--***************************************************************************** -->


    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <value>User.hbm.xml</value>
                <value>Category.hbm.xml</value>
                <value>Product.hbm.xml</value>
                <value>Order.hbm.xml</value>
                <value>OrderLine.hbm.xml</value>
                <!-- Add list of .hbm.xml files here -->
            </list>
        </property>
        <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
          <!--  <prop key="hibernate.hbm2ddl.auto">update</prop>-->
        </props>
        </property>
    </bean>
    <!--***************************************************************************** -->


    <!-- Hibernate transaction manager  ************************************* -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <!--***************************************************************************** -->

     <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
         <property name="sessionFactory">
           <ref bean="sessionFactory"/>
         </property>
    </bean>

    <bean id="productManager" class="org.springframework.aop.framework.ProxyFactoryBean">
         <property name="target">
             <ref bean="productManagerTarget"/>
         </property>
         <property name="proxyInterfaces">
           <value>com.vady.skeleton.service.ProductManager</value>
         </property>
         <property name="interceptorNames">
           <list>
              <value>hibernateInterceptor</value>
           </list>
         </property>
     </bean>


    <!-- DAO beans     ************************************* -->
    <bean id="userDAO" class="com.vady.skeleton.dao.impl.HibernateUserDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="categoryDAO" class="com.vady.skeleton.dao.impl.HibernateCategoryDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="productDAO" class="com.vady.skeleton.dao.impl.HibernateProductDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="orderDAO" class="com.vady.skeleton.dao.impl.HibernateOrderDAOImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!--***************************************************************************** -->


    <!-- Manager beans ************************************* -->
    <bean id="userManager" class="com.vady.skeleton.service.UserManagerImpl">
        <property name="dao" ref="userDAO"/>
    </bean>

    <bean id="productManagerTarget" class="com.vady.skeleton.service.ProductManagerImpl">
        <property name="dao" ref="productDAO"/>
    </bean>


    <!--***************************************************************************** -->


</beans>



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)