Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Spring, Hibernate and Lazy initialize

Anna | 4.06.2014 | нет комментариев
Здравствуйте!
Появляется оплошность дальнейшего рода, когда вывожу на контролере данные из бд.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ua.home.entity.Question.answers, no session or session was closed

Сущность

@Entity
    @Table(name = "Question")
    public class Question implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String question;

    @OneToMany(mappedBy="question")
    private List<Answer> answers;
    .....

DAO

@Repository
@Transactional 
public class QuestionDAOImpl implements QuestionDAO {

	@Autowired
	private SessionFactory sessionFactory;

	@SuppressWarnings("unchecked")
//	@Transactional
	public List<Question> getQuestion() {
		return sessionFactory.getCurrentSession().createQuery("from Question").list();
	}
}

Service

@Service
public class QuestionServiceImpl implements QuestionService {

    @Autowired
    private QuestionDAO questionDAO;

    @Transactional
    public List<Question> getQuestion() {
        return questionDAO.getQuestion();
    }
}

Conroller

@Controller
public class QuestionController {

    @Autowired
    private QuestionService questionService;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model model){
        List<Question> qu =questionService.getQuestion();
        System.out.println(qu);
        return "home";
    }
}

Пробовал применять OpenSessionInViewFilter, с и без url-pattern

<filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

Пробовал применять EAGER, иная оплошность

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.StackOverflowError

Обнаружил ещё совет применять Hibernate.initialize, но не осознаю как его верно сюда применить, если допустимо в всеобще.

В data.xml добавил SessionFactoryUtils, тоже нашёл такой совет, не помогло.

<?xml  version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <tx:annotation-driven  transaction-manager="transactionManager" />

    <bean id="transactionManager"
       >
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="messageSource"
       >
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

    <bean id="propertyConfigurer"

        p:location="/WEB-INF/jdbc.properties" />

    <bean id="dataSource"

        p:driverClassName="${jdbc.driverClassName}" 
        p:url="${jdbc.databaseurl}"
        p:username="${jdbc.username}" 
        p:password="${jdbc.password}" />

<bean name="hibernateSession" factory-method="getSession"
  scope="prototype">
        <constructor-arg index="0" ref="hibernateSessionFactory"/>
        <constructor-arg index="1" value="false"/>
        <aop:scoped-proxy/>
    </bean>

    <bean id="sessionFactory"
       >
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
                <!-- <value>classpath*:**/hibernate.cfg.xml</value> -->

        </property>
        <property name="configurationClass">
            <value>org.hibernate.cfg.AnnotationConfiguration</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>
            </props>
        </property>
    </bean>

</beans>

Какие ещё могут быть решения моей задачи либо допустимо где то допустил ошибку?

Спасибо

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB