2015-03-24 51 views
2

我遇到困難,解決這個問題:Spring + Hibernate的:無會話中發現當前線程的

org.hibernate.HibernateException: No Session found for current thread 
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:993) 
    at com.veram.dao.UsuariosDaoImp.findByUserName(UsuariosDaoImp.java:23) 
    at com.veram.servicos.ServicosUsuario.loadUserByUsername(ServicosUsuario.java:31) 
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:101) 
    at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:132) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:177) 
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:211) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 

類:

的AppConfig

@EnableWebMvc 
@Configuration 
@ComponentScan(basePackages = { "com.ver.*"}) 
@Import({ SecurityConfig.class, DataBaseConfig.class }) 
public class AppConfig extends WebMvcConfigurerAdapter 
{  
    //Adiciona a pasta resources ao dispatcher do MVC 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) 
    { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
    { 
     configurer.enable(); 
    } 

    //Localização das views da minha aplicação 
    @Bean 
    public InternalResourceViewResolver viewResolver() 
    { 
     InternalResourceViewResolver viewResolver 
          = new InternalResourceViewResolver(); 

     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/views/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    }  
} 

DataBaseConfig:

@Configuration 
@Import({ SecurityConfig.class }) 
public class DataBaseConfig 
{  
    @Bean 
    public SessionFactory sessionFactory() 
    { 
      LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource()); 

      builder.scanPackages("com.ver.entid").addProperties(getHibernateProperties()); 
      return builder.buildSessionFactory(); 
    } 

    private Properties getHibernateProperties() 
    { 
     Properties prop = new Properties(); 

     prop.put("hibernate.format_sql", "true"); 
     prop.put("hibernate.show_sql", "true"); 
     prop.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
     return prop; 
    } 

    @Bean(name = "dataSource") 
    public BasicDataSource dataSource() 
    { 
     BasicDataSource ds = new BasicDataSource(); 
      ds.setDriverClassName("com.mysql.jdbc.Driver"); 

     ds.setUrl("jdbc:mysql://localhost:3306/veram_prod"); 
     ds.setUsername("root"); 
     ds.setPassword("root"); 
     return ds;   
    } 

    @Bean 
    public HibernateTransactionManager txManager() 
    { 
     return new HibernateTransactionManager(sessionFactory()); 
    }  
} 

UserServices:

@Service("userDetailsService") 
public class ServicosUsuario implements UserDetailsService 
{ 
    @Autowired 
    private UsuariosDao userDao; 

    @Transactional(readOnly=true) 
    @Override 
    public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException 
    {   
     com.veram.entidades.Usuarios user = userDao.findByUserName(username); 
    } 
} 

UserDaoImp

@Repository 
public class UsuariosDaoImp implements UsuariosDao 
{  
    @Autowired 
    private SessionFactory sessionFactory; 

    @SuppressWarnings("unchecked") 
    public Usuarios findByUserName(String username) 
    {  
     List<Usuarios> users = new ArrayList<Usuarios>(); 

     users = sessionFactory.getCurrentSession() 
      .createQuery("from usuarios where usuario=?") 
      .setParameter(0, username) 
      .list(); 

     if (users.size() > 0) 
     { 
      return users.get(0); 
     } 
     else 
     { 
      return null; 
     }  
    }  
} 

我想了解Spring和Hibernate的配置。每次嘗試訪問當前會話時,我的控制檯中都會找到沒有找到當前線程錯誤的會話(不會停止應用程序)。 如果有人能幫助,我很感激!

+0

的可能重複[Spring和Hibernate:未找到當前線程會話(http://stackoverflow.com/questions/10298483/spring-and-hibernate-no-session-找到當前線程) – beresfordt 2015-03-24 23:45:12

回答

2

嘗試增加@EnableTransactionManagementDataBaseConfig

+0

謝謝何塞!這解決了我的問題! – 2015-03-25 00:13:02

相關問題