[RESOLVIDO] Atualizar Spring 2.0.4 p/ 2.5.5 - HibernateException

2 respostas
abella

Atualizar Spring 2.0.4 para 2.5.5 - HibernateException: createCriteria is not valid without active transaction

Oi,

Eu atualizei a versão do spring de 2.0.4 para 2.5.0 e minha aplicação apresenta a seguinte exception:
org.hibernate.HibernateException: createCriteria is not valid without active transaction

O método testado é o seguinte: getUserByLogin

public class UsuarioDAOImpl {

	private SessionFactory sessionFactory;

	public User getUserByLogin(String login) {

		Session session = getSession();

		Criteria criteria = session.createCriteria(User.class);
		criteria.add(Restrictions.eq("login", login));

		return (User) criteria.uniqueResult();
	}

	protected Session getSession() {
		return getSessionFactory().getCurrentSession();
	}

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
}

Aqui tem a parte relevante do meu application context

<bean id="txInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager" ref="transactionManager" />
		<property name="transactionAttributeSource" ref="transactionAttributeSource" />
	</bean>

	<bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
		<property name="properties">
			<value>
				delete*=PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED
				add*=PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED
				*=readOnly
			</value>
		</property>
	</bean>

	<bean id="autoProxyCreator"
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="interceptorNames">
			<value>txInterceptor</value>
		</property>
		<property name="beanNames">
			<value>*DAO</value>
		</property>
	</bean>

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

	<bean id="sessionFactory" name="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configLocation" value="${hibernate.config.location}" />
	</bean>

Alguém saberia se há alguma diferença no gerenciamento de transações com as versões citadas?

2 Respostas

andreiribas

posta o começo do web.xml aí. Eu uso tudo por anotações, desde o controle de transações até a declaração e autoWiring dos beans, então vou postar minha configuração:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

		xmlns:p="http://www.springframework.org/schema/p" 

		xmlns:aop="http://www.springframework.org/schema/aop"

		xmlns:context="http://www.springframework.org/schema/context"

		xmlns:tx="http://www.springframework.org/schema/tx"

		xsi:schemaLocation="

			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"

			p:sessionFactory-ref="sessionFactory"/>

	

<context:component-scan base-package="testUser" />  

	<tx:annotation-driven/>
</beans>

faltou a declaração do dataSource e da Sesisonfactory, mas isso na realidade não importa.

abella

Pessoal,

Consegui resolver.

O engraçado era que na documentação informada que era “só trocar os jars”, mas se você olhar bem no forum do Spring, tem vários posts com o mesmo problema.

A solução foi a remoção da seguinte linha do hibernate.cfg.xml:

<property name=“hibernate.current_session_context_class”>thread</property>

Criado 23 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 2
Participantes 2