Buenas a todos!!
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:
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);
}
}
Las transacciones las tengo configuradas de la siguiente forma:
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!!