存在2个数据源时始终选择第一个数据源

时间:2019-04-05 21:39:48

标签: java spring hibernate

我在Websphere上使用Spring和Hibernate,并尝试对数据库进行查询。我要导入的2个不同项目中有2个数据源,而我的问题是只有一个数据源可供选择。这是每个项目的休眠XML:

项目1:

<tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="DbSource1" />
        <property name="mappingResources">

项目2:

<bean id="SessionFactory2" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="DbSource2" />
    <property name="mappingResources">

-还有用于存储过程的JDBC模板                 

  <bean id="retrievalService" class="xx.xx.xx.JDBCRetrievalService">
    <property name="jdbcTemplate" ref="jdbcTemplate" />   </bean>

  <bean id="transactionalService" class="xx.xx.xx.JDBCTransactionalService">
    <property name="jdbcTemplate" ref="jdbcTemplate" />   </bean>


In my project application context, I simply import the 2 xmls above 
<import resource="classpath:DBsource-hibernate1.xml" />
  <import resource="classpath:DBSource-hibernate2.xml" />

现在在我的代码中,我有以下内容:

public abstract class HibernateBaseDao implements Serializable {

    private static final long serialVersionUID = -8688473006487128511L;



    /** Hibernate Session factory. */
    @Qualifier("SessionFactory2")
    private SessionFactory sessionFactory;


    protected HibernateBaseDao() {
        this.sessionFactory = null;
    }


    protected SessionFactory getSessionFactory() {
        return sessionFactory;
    }


    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }


    protected Session getSession() {
        return sessionFactory != null ? sessionFactory.getCurrentSession() : null;
    }

}

@Component("MyDao")
public class MyDaoImpl
    extends HibernateBaseDao
    implements MyDaoI{

@Override
public int getValueFromDatabase(){
   SQLQuery sqlQuery =  (SQLQuery) createSQLQuery("select uservalue from MyTable");
   List<Integer> values= sqlQuery.list();
   values.get(0);
}

}

最后这是我的代码:

@自动连线 MyDao myDao;

    @Override
@Transactional()
public void runQuery() throws Exception
{
      myDao.getValueFromDatabase

    }

它返回的问题是说没有表存在。经过调查,我发现它正在选择第一个数据源。 因此,我已经拉了2天了。有什么建议么???我要扩展的基类中已经有SessionFactory2的限定符

非常感谢您

1 个答案:

答案 0 :(得分:0)

您的问题是您没有在属性中注入SessionFactory2。 @Qualifier本身不执行任何操作,您需要添加@Autowire

解决方案是:

/** Hibernate Session factory. */
    @Autowire
    @Qualifier("SessionFactory2")
    private SessionFactory sessionFactory;

此外,您不需要getter / setter就可以在私有属性上使用@Autowired;)