Bonjour,
je realise un ensemble de traitement par paquet avec Hibernate.
Basiquement ce sont 2 updates et/ou 2 ajouts dans 2 tables differentes dont voici le code :
Les lignes en rouge ne se rien de plus que des appels de type Session.save(...), et peuvent etre consideres comme des ajouts d'enregistrement dans la base de données.
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
25
26
27
28
29
30
31
32
33
34
35 public void insert(FluxTasca fluxtasca) throws PersistenceServiceException{ fluxtasca.setTxsequencia(fluxtasca.getTxsequencia() + 1); String hqlUpdateTasques="update from net.gencat.uid.model.param.flux.FluxTasca " + " set txsequencia=txsequencia + 1" + " where txsys='" + Constantes.getTipusSystem() + "' " + " and flcodi='" + fluxtasca.getFlcodi() + "'" + " and flservei='" + fluxtasca.getFlservei() + "'" + " and txsequencia >= " + fluxtasca.getTxsequencia() + " order by txsequencia desc"; String hqlUpdatePred="update from net.gencat.uid.model.param.flux.Predecessor " + " set prsequencia=prsequencia + 1" + " , pranterior=pranterior +1 " + " where prsys='" + Constantes.getTipusSystem() + "' " + " and flcodi='" + fluxtasca.getFlcodi() + "'" + " and flservei='" + fluxtasca.getFlservei() + "'" + " and prsequencia >= " + fluxtasca.getTxsequencia() + " order by txsequencia desc"; Transaction tx = dao.getHibernateSession().beginTransaction(); try{ dao.getHibernateSession().createQuery(hqlUpdateTasques).executeUpdate(); dao.getHibernateSession().createQuery(hqlUpdatePred).executeUpdate(); if (!getTascaFromFlux(fluxtasca.getFlcodi(),fluxtasca.getFlservei()).isEmpty()){ if (fluxtasca.getTxsequencia()==1){ getPredBO().save(fluxtasca.getFlcodi(),fluxtasca.getFlservei(),fluxtasca.getTxsequencia()+1,fluxtasca.getTxsequencia()); }else{ getPredBO().save(fluxtasca,fluxtasca.getTxsequencia()-1); } } save(fluxtasca); tx.commit(); }catch (HibernateSystemException e){ tx.rollback(); } }
ce code fonctionne très bien. sauf qu'en cas d'erreur dans une des instructions save, j'ai peur que cette erreur puisse se déclencher plus tard et donc hors de mon try catch.
En tout cas, ce que j'ai constaté en utilisant le debogueur, c'est que lors du commit(), seulement les deux premieres instructions sont executées en base de données, alors que les suivantes le sont seulement quand on sort de la methode insert.
Etrange non? Y'a t-il quelque chose que je n'ai pas compris avec Hibernate ?
Partager