對於Hibernate我真的很陌生,並且一直在研究一些東西。我有兩個數據庫,我在Tomcat的context.xml中定義了JNDI連接字符串。在我的應用程序,它使用了Spring和Hibernate我有2個會議工廠,第一個是如下 - >如何在Spring和Hibernate中使用會話工廠處理多個數據庫連接
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.pool_size">10</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.transaction.auto_close_session">true</prop>
<prop key="hibernate.transaction.flush_before_completion">true</prop>
<prop key="current_session_context_class">true</prop>
<!--HSQL-->
<prop key="hibernate.connection.datasource">java:comp/env/jdbc/xxx</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.mytest.examples.Person</value>
<value>com.mytest.examples.Customer</value>
<value>com.mytest.examples.Employee</value>
</list>
</property>
第二SessionFactory的點到第二個數據庫如下
<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.pool_size">10</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.transaction.auto_close_session">true</prop>
<prop key="hibernate.transaction.flush_before_completion">true</prop>
<prop key="current_session_context_class">true</prop>
<!--HSQL-->
<prop key="hibernate.connection.datasource">java:comp/env/jdbc/yzz</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.mytest.examples.Container</value>
<value>com.mytest.examples.Credentials</value>
</list>
</property>
現在,當我嘗試使用這些工廠使用以下
Session session = getHibernateTemplate().getSessionFactory().openSession();
我總是默認獲得第一個工廠,並且能夠訪問其架構中的所有表,但不能訪問第二個工廠。如何指定我想使用的工廠?
嗨JB,謝謝你的回覆。我正在使用Spring的'getHibernateTemplate()'方法來調用getSessionFactory()。然而,他們都不接受一個參數,我可以指定我想要使用的sessionFactory的ID,這是我在上面的原始文章中包含的hibernate.cfg中定義的。 我試過直接使用HibernateTemplate,但我仍然沒有找到一種方法來指定我想要模板返回的sessionFactory。 會不會SessionFactory.getCurrentSession()返回該文件中的默認會話? – Cranialsurge
你調用哪個對象/類型getHibernateTemplate()?至於getCurrentSession():這是一個實例方法。您可以注入在對象中定義的兩個會話工廠,並根據要定位的數據庫調用getSessionFactory中的一個或另一個。 –