Problema con metodo transaccional @transactional

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.