Hola, tengo un extraño problema con un método que he anotado como @transactional. El problema es que si quito dicha anotación, funciona correctamente (realiza 3 updates en la base de datos), pero si pongo la anotación solo realiza un update (el de la entidad nodeVia).
@transactional
public boolean moveOneNode(int idNodeVia,Coordinate newCoordinate){
NodeVia nodeVia=(NodeVia)getHibernateTemplate().get(NodeVia.class, idNodeVia);
nodeVia.setGeom(JTSUtils.createPoint(newCoordinate));
getHibernateTemplate().saveOrUpdate((nodeVia));
try {
List<SegmentVia> segmentViasNodeDest=new ArrayList<SegmentVia>(nodeVia.getSegmentViasForIdNodeDest());
for (int cont=0;cont<segmentViasNodeDest.size();cont++){
SegmentVia segment=segmentViasNodeDest.get(cont);
LineString lineString=(LineString)segment.getGeom();
Coordinate coords []=lineString.getCoordinates();
if (coords instanceof MCoordinate[]){
coords[coords.length-1]=new MCoordinate(newCoordinate.x,newCoordinate.y);
}else{
return false;
}
segment.setGeom(JTSUtils.createLineString(coords));
getHibernateTemplate().saveOrUpdate(segment);
}
List<SegmentVia> segmentViasNodeOrigin=new ArrayList<SegmentVia>(nodeVia.getSegmentViasForIdNodeOrigin());
for (int cont=0;cont<segmentViasNodeOrigin.size();cont++){
log.info("Procediendo a cambiar un vertice de un segmento origen");
SegmentVia segment=segmentViasNodeOrigin.get(cont);
LineString lineString=(LineString)segment.getGeom();
Coordinate coords []=lineString.getCoordinates();
if (coords instanceof MCoordinate[]){
coords[0]=new MCoordinate(newCoordinate.x,newCoordinate.y);
}else{
log.error("Es necesario un tipo especial Coordinates");
return false;
}
segment.setGeom(JTSUtils.createLineString(coords));
getHibernateTemplate().saveOrUpdate(segment);
}
} catch (DataAccessException e) {
// TODO Auto-generated catch block
log.error("Error:"+e);
} catch (ConcurrentModificationException e) {
// TODO Auto-generated catch block
log.error("Error:"+e);
}
return true;
}
En el fichero de configuración de spring-hibernate está configurado lo siguiente:
<tx:annotation-driven transaction-manager="transactionManager1"/>
<bean id="transactionManager1" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
A ver si alguien puede echarme un cable.
Salu2












RE: Problema con metodo transaccional @transactional
A mi me ocurre lo mismo que a ti pero con MyBatis en vez de con Hibernate.
Si lo lograste solucionar me podrías indicar cómo lo hiciste.
Gracias.