2013-06-23 50 views
4

我需要在我的spring hibernate應用程序中連接到兩個數據庫。從Hibernate和Spring連接到多個數據庫

的配置如下:

我試圖讓在代碼中兩個不同的會話工廠,但它不工作 我得到這個錯誤:

25731 [23 Jun 2013 15:41:36 512] [qtp259913092-20] [ERROR] errorId=org.hibernate.HibernateException: No Session found for current thread 

我試圖定義我的課程如下:

@Repository 
public class UsersBMDao extends HibernateTemplate{ 
    private static Logger LOG = LoggerFactory.getLogger(UsersBMDao.class); 

    @Autowired 
    SessionFactory sessionFactory; 

    @Autowired 
    public UsersBMDao(@Qualifier("sessionFactory2") SessionFactory sessionFactory) { 
     super(sessionFactory); 
    } 

    public List<UsersBM> getAllUsers(){ 
     Criteria crit = sessionFactory.getCurrentSession().createCriteria(UsersBM.class); 
     return crit.list(); 
    } 
} 

但它不工作 - 任何方向將有所幫助!

感謝名單

----------------我試圖@Transactional添加到類(的建議),並得到這個異常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'eloanDataController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.eloan.service.LoanService com.eloan.controller.EloanDataController.loanService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loanService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.eloan.service.SapLoanDetailsService com.eloan.service.LoanService.sldService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sapLoanDetailsService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.eloan.service.dao.UsersBMDao com.eloan.service.SapLoanDetailsService.users; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersBMDao' defined in file [/Users/nir/workspace/eloan/target/classes/com/eloan/service/dao/UsersBMDao.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.eloan.service.dao.UsersBMDao]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1120) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) ~[spring-beans-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) ~[spring-context-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) ~[spring-context-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:647) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:598) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:661) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:517) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:458) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 
at javax.servlet.GenericServlet.init(GenericServlet.java:244) [javax.servlet-3.0.0.v201112011016.jar:na] 
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:517) [jetty-servlet-8.1.7.v20120910.jar:8.1.7.v20120910] 

回答

2

最後我已經解決了它這樣的:

@Repository 
public class TstDao{ 

    private static Logger LOG = LoggerFactory.getLogger(TstDao.class); 

    @Autowired 
    @Qualifier(value="transactionManager2") 
    private PlatformTransactionManager tm; 
    private TransactionTemplate transactionTemplate; 

    @PostConstruct 
    public void init(){ 
     transactionTemplate = new TransactionTemplate(tm); 
     LOG.debug("tm="+tm); 
    } 

    @Autowired 
    @Qualifier(value="sessionFactory2") 
    SessionFactory sessionFactory; 

    public List<Obj_Test> getAllUsers(){ 
     return transactionTemplate.execute(new TransactionCallback<List<Obj_Test>>() { 

      @Override 
      public List<Obj_Test> doInTransaction(TransactionStatus status) { 

       Criteria crit = sessionFactory.getCurrentSession().createCriteria(Obj_Test); 
       return crit.list(); 

      } 

     }); 
    } 
} 

在我擁有了一切複製以及配置和它的工作原理類似。

相關問題