Dúvida em Hibernate DAO utilizando SPRING

2 respostas
R

Opa galera, seguinte…

Sempre que eu desenvolvi utilizando hibernate + spring, nunca utilizei classes DAO, sempre fiz tudo na mão - criar a session, transaction, executar a query, processar e retornar a resposta…
Por uma lado isso foi bom pq hj em dia conheço bem o hibernate, mais estou partindo para os DAOs pois como todos ja sabem facilita o trabalho…

Estou gerando meus DAOs com o hibernate tools, sendo um DAO para cada entidade. Na verdade eu vou desenvolver um DAO genérico que passando um Objeto ja mapeado ele grava no banco de dados, pra que eu n precise ter várias classes que façam exatamente as mesmas coisas.

Estudando a integração do Spring com o Hibernate, dei uma olhada na classe HibernateDaoSupport que possue métodos para ajudar nós programadores, porém tenho uma dúvida…
Para recuperar a sessão o HibernateDaoSupport utiliza a classe HibernateTemplate… gostaria de saber se eu não poderia bindar a minha SessionFactory diretamente para uma propriedade do meu DAO, por exemplo:

... antes disso tenho a definição do datasource e dos properties...

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	    <property name="dataSource" ref="myDataSource"/>
	   	<property name="hibernateProperties" ref="myHibernateProperties" />
     
	    <property name="mappingResources">
	      	<value>../hibernate/TipoContato.hbm.xml</value>
            </property>
</bean>
	

<bean id="meuDAO" class="pkg.MeuDao">
		<property name="factory" ref="mySessionFactory"></property>
</bean>

Portanto no meu dao eu apenas executaria uma chamada de getFactory().getCurrentSession().(oq desejo fazer)…
Controlando também na mão a abertura de transactions assim como o seu COMMIT/ROLLBACK…
Bom portanto tenho algumas perguntas hehehe

Esta é uma boa alternativa ?
Fazendo desta maneira, eu não preciso extender a classe HibernateDaoSupport né ?
Preciso definir um escopo específico para o meu DAO ? Ou desta maneira vai funcionar corretamente ?

Na internet vi que existem classes como a TransactionProxyFactoryBean, que é usada, acho eu, para criar este dao… mais prefiro programar manualmente os rollbacks necessários…

Se existir alguma maneira melhor de fazer a mesma coisa, pode fala =]

Att
Rodrigo Kerkhoff

2 Respostas

G

Você pode passar uma sessionFactory para o DAO sem problemas. Agora, eu acho um pouco sem sentido usar a integração do Spring com Hibernate e não utilizar a HibernateDaoSupport, que já provê basicamente tudo que você vai fazer na mão.

R

É que sei la, não entendi direito como usar o HibernateDaoSupport… dai como vou fazer um DAO generico, e vou programar ele apenas uma vez, não me importei em fazer isto…

Uma duvida então do support então, quem sabe você me faz mudar de idéia hehehe

Por exemplo… se eu tiver 3 factorys definidos no meu applicationContext…
Para recuperar a sessão, ele faz uso do método getHibernateTemplate() certo ?

Como eu configuro qual factory ele irá chamar ?

Mesmo usando o HibernateDaoSupport minha classe DAO ainda fica muito parecida com a que eu iria programar na mão… por exemplo:

Método save com support:

public void save(Customer customer) {
    getHibernateTemplate().save(customer);
}

Sem support

public void save(Customer customer) {
    this.session.save(customer);
}

Na sua visão, quais as principais vantagens do HibernateDaoSupport ?
Você usa ele em conjunto com mais algum bean do Spring ? Como por exemplo a TransactionProxyFactoryBean ?

Ja pesquisei bastante até sobre o HibernateDaoSupport, e vou pesquisar mais ainda. Pergunto mais por que cada um tem uma visão diferente né, e pelo jeito você tem uma diferente da minha =]

Criado 5 de junho de 2008
Ultima resposta 5 de jun. de 2008
Respostas 2
Participantes 2