Hibernate x Spring

Olá amigos,

  1. Preciso fazer a integração entre o Hibernate e o Spring, porém, estou com um problema na hora de fazer a conexão com o banco de dados.

  2. Minha aplicação vai ter uma tela de Login onde cada usuário terá um id e senha para acessar o sistema.

  3. O hibernate tem a SessionFactory que compartilha uma conexão (com um usuário e senha) para toda a aplicação. Como eu faço para utilizar uma SessionFactory por Usuario (HttpSession) utilizando o String e Hibernate?


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.
DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:db/app</value>
</property>
<property name="username"><value>sa</value></property>
<property name="password"><value></value></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate.
LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="mappingResources">
<list>
<value>org/model/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.HSQLDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

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

<bean id="userDAO"
class="org.dao.hibernate.UserDAOHibernate">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

</beans>
  1. Preciso fazer com que a minha SessionFactory se torne única por sessão, ou seja, uma SessionFactory por Usuário.

  2. Como eu faço para setar o usuário e senha e registrar a minha sessionFactory como sendo única por sessão?

  3. Eu fiz várias buscas na google e não encontrei nada neste sentido. Como eu sei que a comunidade do GUJ é forte, e tem como prática o auxílio aos menos experiêntes, me senti a vontade para colocar minha dúvida e problema, e sei que poderá ser a dúvida de muitos outros.

  4. Alguém poderia fornecer um exemplo elucidativo.

Agradeço desde já…

Jukinha :?:

[quote=jukinha]Olá amigos,

  1. Preciso fazer a integração entre o Hibernate e o Spring, porém, estou com um problema na hora de fazer a conexão com o banco de dados.

  2. Minha aplicação vai ter uma tela de Login onde cada usuário terá um id e senha para acessar o sistema.

  3. O hibernate tem a SessionFactory que compartilha uma conexão (com um usuário e senha) para toda a aplicação. Como eu faço para utilizar uma SessionFactory por Usuario (HttpSession) utilizando o String e Hibernate?


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.
DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:db/app</value>
</property>
<property name="username"><value>sa</value></property>
<property name="password"><value></value></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate.
LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="mappingResources">
<list>
<value>org/model/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.HSQLDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

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

<bean id="userDAO"
class="org.dao.hibernate.UserDAOHibernate">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

</beans>
  1. Preciso fazer com que a minha SessionFactory se torne única por sessão, ou seja, uma SessionFactory por Usuário.

  2. Como eu faço para setar o usuário e senha e registrar a minha sessionFactory como sendo única por sessão?

  3. Eu fiz várias buscas na google e não encontrei nada neste sentido. Como eu sei que a comunidade do GUJ é forte, e tem como prática o auxílio aos menos experiêntes, me senti a vontade para colocar minha dúvida e problema, e sei que poderá ser a dúvida de muitos outros.

  4. Alguém poderia fornecer um exemplo elucidativo.

Agradeço desde já…

Jukinha :?:[/quote]

Bom vamos lá:

1-) Para sua integração do Hibernate + Spring, sugiro que crie um Context separado somente par esse tipo de configuração.

No seu web.xml acrescente:

[quote]
contextConfigLocation

/WEB-INF/applicationContext-hibernate.xml


[/quote]

Com isso sua configuração vai estar disponível no carregamento da aplicação. Caso ainda tenha problemas nessa parte, me envie uma msg pvt com seu e-mail, q te mando um arquivo de configuração de exemplo.

3-) Existe um filtro que se chama OpenSessionInViewFilter ele faz o que você precisa. Eu tive alguns problemas e acabei criando um mudando o FlushMode para Auto.

Classe do filtro:

Configuração no web.xml:

Onde springapp é o nome do meu Dispatcher.