Bonjour à tous.
J'utilise Spring 3.0.4 et Hibernate 3.5.5 et j'ai quelques soucis à faire fonctionner une transaction.
Il faut savoir que je ne maîtrise pas le concept (enfin si de manière théorique) et que je suis donc quasiment certain que mon problème est ridicule.
Bref, j'ai voulu effectuer un test pour voir si la transaction que j'ai créé était bien active et il se trouve que malgré la RuntimeException lancée, le premier insert aura bien lieu dans ma DB (MySQL).
Voici donc ce que j'ai fais.
Dans mes fichiers de configuration Spring:
Dans ServerServiceImpl, voici ce que je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <!-- HibernateTransactionManager provided by Spring --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- HibernateTemplate provided by Spring --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- Mon service --> <bean id="serverService" class="com.lanengine.core.domain.services.ServerServiceImpl"> <property name="serverDao" ref="serverDao" /> <property name="gameService" ref="gameService" /> <property name="fluxService" ref="fluxService" /> <property name="validator" ref="validator" /> </bean> <!-- Mon dao --> <bean id="serverDao" class="com.lanengine.core.domain.dao.ServerDaoImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean>
(C'est du test hein )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 @Transactional public String uploadServersFromFile(MultipartFile file) { try { ServersDTO serversDTO = fluxService.loadObjectFromFile(file); if (serversDTO == null || serversDTO.getServerList() == null) { return "cannotRead"; } ObjectImportResult<Server, ServerDTO> importResult = getServersListFromDTO(serversDTO.getServerList()); if (!importResult.getValueAndErrorListByObjectDTO().isEmpty()) { return "error"; } else { serverDao.save(importResult.getObjects()); return "1"; } } catch (UnknownFileTypeException e) { return "wrongFileType"; } }
Notez l'appel de serverDao.save(); que je vous détaille ci-dessous:
Seulement voilà, après exécution du code, le premier serveur sera bien inséré dans la DB...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void save(List<Server> servers) { for (Server server : servers) { getHibernateTemplate().save(server); throw new HibernateException("oups"); } }
Alors quid?
Merci d'avance pour votre aide.
Partager