Problemas com Spring e Hibernate

13 respostas
vanzella

Ola pessoal.
Estou desenvolvendo um projeto com Spring e Hibernate e JSF, estou tendo dificuldade pra controlar a sessão do hibernate.
O Spring gerencia as sessoes de forma automatizada, ai que esta o problema, quando utilizo o metodo load do hibernate em um Bean que contem um lazy, ocorre uma exceção pois a conexão é fechada antes do hibernate fazer a consulta do lazy.

Alguem já se deparou com essa situação?

13 Respostas

R

Qual exceção está sendo lançada? LazyInitializationException (acho que é isto)?

Tente adicionar ao seu arquivo web.xml o filtro OpenSessionInView que vem no Spring Framework. Isto deve resolver seu problema.

sunshine

só por curiosidade:

você está usando annotations em ambos?

vanzella

Ola RicardoLuis, a exceção é LazyInitializationException mesmo, vou procurar por OpenSessionInView, estou conhecendo esses Frameworks agora, é tudo novo pra mim, obrigado pela dica.

Sunshine estou usando annotation somente pro Hibernate, não sei se tem como usar pro Spring.

R

Este filtro (OpenSessionInViewFilter) abre uma sessão do hibernate durante a construção da interface gráfica.

De uma pesquisada sobre ele aqui no fórum mesmo e na página do Spring.

sunshine

vanzella

creio q tem como usar annotations com o Spring.
To pensando em usar.

lá vai uma mensagem aqui do fórum

http://www.guj.com.br/posts/list/50503.java

R

Sim sunshine , é possível utilizar o Spring Framework com annotations, basta você baixar o spring-annotations e adicioná-lo ao seu classpath.

Lembrando que o spring-annotations não é um projeto oficial do Spring e sim um projeto independente, chefiado pelo Urubatan, que faz parte deste fórum.

Mais esclarecimentos Aqui.

R

sunshine:
vanzella

creio q tem como usar annotations com o Spring.
To pensando em usar.

lá vai uma mensagem aqui do fórum

http://www.guj.com.br/posts/list/50503.java

Sim sunshine , é possível utilizar o Spring Framework com annotations, basta você baixar o spring-annotations e adicioná-lo ao seu classpath.

Lembrando que o spring-annotations não é um projeto oficial do Spring e sim um projeto independente, chefiado pelo Urubatan, que faz parte deste fórum.

Mais esclarecimentos Aqui.

leandro.ferreira

Estou trabalhando com o Spring e Hibernate com JSF, mas mesmo colocando o OpenSessionInViewFilter no web.xml ele dá este LazyinitializationException.

Eu sei q eu tenho q manter a sessao do hibernate aberta para buscar os dados de um relacionamento, mas quem gerencia esta sessao eh o Spring e como não sei onde q posso mante-la aberta nestes casos, estou pedindo a ajuda de vcs, pois nao parece ser algo sobrenatural, mas ainda sim um pouco novo pra mim.

Caso alguem tenha alguma outra sugestao, como nao conheço direito o Spring, estou tentando descobrir a solução.

Obrigado a todos pela ajuda.

O

tb estou com este problema sem solução …

antoniopopete

Vocês conseguiram resolver esse problema?
Mesmo adicionando o filter(OpenSessionInViewFilter) não consegui resolver.

thiago.limma

Alguém encontrou resposta para esse problema de Lazy??

Estou com o mesmo problema aqui

sjoaquim

Pessoal, estava com os mesmos problemas quanto a isso utilizando Struts, mas consegui resolver.

É o seguinte: eu estava colocando TUDO num mesmo XML de contexto do spring (dataSource, sessionFactory, DAOs e Actions do Struts). Dei uma olhada nos logs e uma debugada no código do Spring e vi que ele carregava duas vezes o mesmo contexto: primeiro, através do listener do web.xml e depois através do plug-in do Struts. E isso provavelmente causava um conflito, já que haviam dois sessionFactories, duas Sessions, etc.

Quando separei as Actions do Struts num XML separado, que é carregado pelo plug-in, o OpenSessionInViewFilter passou a funcionar exatamente como eu esperava, e consegui utilizar Lazy-Loading nos JSPs.

Espero que isso ajude!!

E

Boa noite pessoal,
sou iniciante no hibernate e spring e estou com este mesmo bendito problema. Já adicionei no WEB.XML o arquivo de conf do spring, o filter e o listener de contextLoad do spring:

...
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/applicationContext.xml</param-value>
</context-param>
...
<filter>
    <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

Meu DAO:

@Transactional
@Repository
public class Dao extends HibernateDaoSupport implements IDao {

    public Collection listar(Object t) {
        return getHibernateTemplate().loadAll(t.getClass());
    }

    public Object localizar(Object t, Serializable pk) {
        return getHibernateTemplate().load(t.getClass(), pk);
    }

    public void salvar(Object t) {
        getHibernateTemplate().saveOrUpdate(t);
    }
...

Estou esquecendo algo?
Desde já agradeço a quem puder ajudar.

Criado 5 de fevereiro de 2007
Ultima resposta 16 de mai. de 2009
Respostas 13
Participantes 9