Tengo un problemilla al ejecutar una transacción. Mi problema es que tengo un metodo java en el que realizao unos DELETE y luego un INSERT, pero al ejecutarlo, hibernate me esta ejecutando primero el INSERT y luego los DELETES, necesito que me haga primero los DELETES ya que el insert puede contener un valor de las filas que voy a eliminar, y como la columna es unica pues me salta una exception y no me lo hace...
el método que realiza los DELETES y el INSERT es:
Código:
Las transacciones las tengo configuradas de la siguiente forma:public boolean mergeValues(List<Geography> geographies, Geography geography) throws MeServiceException { try { int eliminadas = 0; if (geographies != null && geographies.size() > 0) { for (Geography g : geographies) { boolean eliminada = geographyDAO.delete(g); if (eliminada) { eliminadas++; } } } else { eliminadas = 0; } int guardado = geographyDAO.save(geography); if (eliminadas >= 2 && guardado == 1) { return true; } else { return false; } } catch (ConstraintViolationException ex) { throw new MeServiceConstraintViolationException(ex); } catch (Exception ex) { throw new MeServiceException(ex); } }
Código XML:
Ver original
<aop:config> <aop:pointcut id="geographyListMethods" expression="execution(* es.unav.fondospersonales.service.administracion.GeographyListService.*(..))" /> <aop:advisor advice-ref="geographyTxAdvice" pointcut-ref="geographyListMethods" /> </aop:config> <tx:advice id="geographyTxAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="merge*" propagation="REQUIRED" rollback-for="MeServiceException" /> <tx:method name="remove*" propagation="REQUIRED" rollback-for="MeServiceException" /> <tx:method name="update*" propagation="REQUIRED" rollback-for="MeServiceException" /> <tx:method name="add*" propagation="REQUIRED" rollback-for="MeServiceException" /> </tx:attributes> </tx:advice>
Alguien sabe porque me hace primero los INSERTS??
Muchas gracias!!