Boas
Ainda sou novo no Spring e hibernate e tou a fazer um web service restful. Tudo funciona bem, mas reparei que quando existe chamadas em simultâneo a coisa muda de figura. Por exemplo:
Se tivermos tres tabelas da base de dados:
Users - temos informação dos utilizadores
Grupos - temos informação dos grupos
GruposHasUser - associação dos utilizadores a grupos
Agora temo um método que o objectivo é receber um objecto com a informação e popular essas tabelas.
no método:
faço save do user
depois verifico se o grupo ja existe na BD, pois a descrição é UK.
e no final faço associação.
o problema é quando dois utilizadores chamam este método concorrentemente, pois ao nível da verificação do grupo não funciona como eu espera.
o meu método:
@transactional(readOnly=false)
public void create(User obj){
}
Em termos de sistema tenho a camada de @service a camada de @repository e a camada de @controler. Aqui parece-me tudo bem, talvez seja ao nível da configuração das transacções.
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven />
Depois a sessionfactory é passada conforme o exemplo
<bean id="userDao" class="spring.dao.UserDAOImpl">
<constructor-arg>
<ref bean="sessionFactory" />
</constructor-arg>
</bean>
É de referir que obtenho sempre na DAO a session com o metodo
sessionFactory.getCurrentSession();
Se puderem dar uma ajuda agradecia.
Cumprimentos