Desabilitar Open Session In View

7 respostas
Diego.G.A

Galera estou tendo o seguinte problema:

Eu carrego uma entidade do banco com hibernate e exibo em um formulalrio JSF.
porém quando eu envio o formulario ele persiste a minha modificação.
Sendo que eu quero desabilitar esta funcionalidade.
Estava pesquisando na net e vi sobre open session in view, creio que seja isto.
Estou utilizando spring para levantar o hibernate.

Alguém sabe como posso fazer para desabilitar isto?

7 Respostas

Priuli

Diego, este padrão não grava as informações no banco é a maneira que você está utilizando que esta fazendo gravar.
Este padrão deixa a sessão do Jpa/hibernate… aberta para que a tua aplicação possa realizar consultas Feth.LAZY enquanto a view é renderizada da sua aplicação.

Se vc mandar um formulario que esta carregando uma entidade e no servidor vc usar o salvar do jpa/hibern… realmente vai atualizar as informações, mesmo sem o OpenSessionInView, ou intão vc configuro o jpa/hibernate para ficar com escopo de aplicação ou sessão neste caso deveria estar como request…

Diego.G.A

Valeu, assim que eu fizer os teste coloco aqui o resultado.

Diego.G.A

Eu fiz os testes e não funcionou.

esse é o meu applicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
	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:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
			http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/jee  http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
			http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
	default-autowire="byName">

	<context:annotation-config />

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

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
	</bean>
	<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<tx:annotation-driven transaction-manager="txManager" />
	
	<bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl"/>

</beans>
Priuli

Como está esta propriedade 'hibernate.current_session_context_class ’ do hibernate no seu projeto ?

A minha esta assim:

<prop key="hibernate.current_session_context_class">thread</prop>

E como vc esta usando na sua tela ? e como esta o seu backbean ?

Lembrando que c vc ñ quizer salvar vc tem que tratar no seu backbean…

Diego.G.A

Eu não configurei hibernate.current_session_context_class

e como como estou utlizando na tela?

Priuli

*tava sem net… (por isso da demora)

se ñ tiver configurado, o escopo deve estar como sessão!

Diego.G.A

Eu descobri o que era,

Seguinte,
Quando eu carregava os dados, eu atribuia uma string vazia ao meu elemento,
sendo que , ao submeter o formulario, ele chamava automaticamente o método novamente ai o método de carregar seta a string vazia no bean e o ele acaba sendo persistido.
eu só tirei isso!

mas o porque acontecia isso eu não sei.
mudei o flushmode pra commit e nã oresolveu, depois coloquei em manual,
só que tirei depois pq não queria assim.

Criado 4 de abril de 2011
Ultima resposta 13 de abr. de 2011
Respostas 7
Participantes 2