0

The problem

I've migrated from Hibernate 3.6.10 to 4.3.11. These are my pom.xml properties:

   <!--<hibernate.version>3.6.10.Final</hibernate.version>-->
    <hibernate.version>4.3.11.Final</hibernate.version>

I'm working with legacy code and I've got a service method like this:

  public Collection<ProtExtraccionMuestra> guardarProtExtraccionMuestras(
    Collection<ProtExtraccionMuestra> protExtraccionMuestras) {
    Date fechaEntrada = null;
    Date fechaSalida = null;
    Collection<ProtExtraccionMuestra> muestrasRetornar = new HashSet<ProtExtraccionMuestra>();
    if (protExtraccionMuestras != null) {
      for (ProtExtraccionMuestra protExtraccionMuestra : protExtraccionMuestras) {
        Localizador.servMuestra().comprobarMuestraEnBiobanco(protExtraccionMuestra.getMuestra());
        fechaEntrada = protExtraccionMuestra.getMuestra().getFechaEntrada();
        fechaSalida = protExtraccionMuestra.getMuestra().getFechaSalida();
        protExtraccionMuestra = (ProtExtraccionMuestra) guardar(protExtraccionMuestra, true);
        protocoloExtraccionService.comprobarEstadoMuestra(protExtraccionMuestra.getMuestra(), fechaEntrada, fechaSalida);
        muestrasRetornar.add(protExtraccionMuestra);
      }
    }
    return muestrasRetornar;
  }

After upgrading, the code didn't work. I got this error (HibernateException: Could not obtain transaction-synchronized Session for current thread):

10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1) [ERROR,ExceptionControllerAdvice,http-/127.0.0.1:63724-1] EXCEPTION TRACE: 
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1) org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at es.gva.san.fisabio.rvb.HibernateDAO.getSession(HibernateDAO.java:31)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at es.gva.san.fisabio.rvb.HibernateDAO.merge(HibernateDAO.java:59)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at util.hibernate.DiUtilHibernate.merge(DiUtilHibernate.java:166)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at service.AbstractService.modificar(AbstractService.java:1052)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at service.GenericCRUDSImpl.guardar(GenericCRUDSImpl.java:110)
10:32:54,135 INFO  [stdout] (http-/127.0.0.1:63724-1)   at es.di.biobanco.csisp.laboratorio.service.ProtExtraccionMuestraServiceImpl.guardarProtExtraccionMuestras(ProtExtraccionMuestraServiceImpl.java:78)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at java.lang.reflect.Method.invoke(Method.java:498)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at com.sun.proxy.$Proxy58.guardarProtExtraccionMuestras(Unknown Source)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at es.gva.san.fisabio.rvb.controller.LaboratorioController.guardarProtExtraccionMuestras(LaboratorioController.java:128)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at es.gva.san.fisabio.rvb.controller.LaboratorioController$$FastClassBySpringCGLIB$$7fedee67.invoke(<generated>)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at es.gva.san.fisabio.rvb.controller.LaboratorioController$$EnhancerBySpringCGLIB$$b9797364.guardarProtExtraccionMuestras(<generated>)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at java.lang.reflect.Method.invoke(Method.java:498)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
10:32:54,136 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:220)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:197)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
10:32:54,139 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:215)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
10:32:54,140 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
10:32:54,141 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
10:32:54,141 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
10:32:54,141 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
10:32:54,142 INFO  [stdout] (http-/127.0.0.1:63724-1)   at java.lang.Thread.run(Thread.java:745)

So I've made it transactional with @Transactional decorator.

Then I have the following error (InvalidDataAccessApiUsageException: object references an unsaved transient instance):

16:50:05,587 ERROR es.gva.san.fisabio.rvb.controller.advice.ExceptionControllerAdvice,http-/0.0.0.0:63004-6:41 - EXCEPTION TRACE: 
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: es.di.biobanco.csisp.laboratorio.entity.ProtocoloExtraccion; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: es.di.biobanco.csisp.laboratorio.entity.ProtocoloExtraccion
    at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:190)
    at org.springframework.orm.hibernate4.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:730)
    at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:592)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:504)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
    at es.gva.san.fisabio.rvb.controller.LaboratorioController$$EnhancerBySpringCGLIB$$432cae2f.guardarProtExtraccionMuestras(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:220)
    at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:197)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:215)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: es.di.biobanco.csisp.laboratorio.entity.ProtocoloExtraccion
    at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:294)
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:537)
    at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:311)
    at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:321)
    at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:310)
    at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4243)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:546)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:232)
    at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:159)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
    ... 76 more

More data and code

This is the way objects are saved, after some validations:

In some heir of AbstractEntity:

    public AbstractEntity guardar(AbstractEntity entity,boolean merge) {
        return super.modify(entity, merge);
    }
  public HibernateDAO getHibernateTemplate() {
    return this;
  }
[...]

  public AbstractEntity modify(AbstractEntity obj, boolean merge) {
    if (!merge) {
      try {
        this.getHibernateTemplate().saveOrUpdate(obj);
      } catch (Exception e) {
        logger.error(e);
        obj = DiUtilHibernate.merge(obj, getSession());
        this.getHibernateTemplate().saveOrUpdate(obj);
      }
    } else {
      obj = DiUtilHibernate.merge(obj, this.getHibernateTemplate());
    }
   return obj;
  }

And this awful utility class:

  /**
   * Merge function, to load only the required entities
   */
  public static AbstractEntity merge(AbstractEntity ent, Session ses) {
    // We save the values, before they are lost with the merge
    String lazysCargados = ent.getLazysCargados();
    boolean valorLazys = ent.getCargarLazysProxy();
    return afterMerge((AbstractEntity) ses.merge(ent), lazysCargados, valorLazys);
  }

Please let me know if you need some other piece of code or clarification.

Alfonso Tienda
  • 3,442
  • 1
  • 19
  • 34
  • You'll probably need to consider more things than adding a simple `@Transactional` annotation after a major version upgrade. Maybe look for a migration guide or something like that. – Kayaman Nov 06 '20 at 09:03
  • Yes, we followed migration guides, changed all the classes, etc. But no guide deeps into the code. First error was unexpected. – Alfonso Tienda Nov 06 '20 at 09:13
  • Aren't they all. You could continue with the `@Transactional` route and [fix the references](https://stackoverflow.com/questions/2302802/how-to-fix-the-hibernate-object-references-an-unsaved-transient-instance-save). – Kayaman Nov 06 '20 at 15:30

0 Answers0