12

根据我的理解,在 hibernate-cfg.xml 文件中

hibernate-configuration 只能有一个 session-factory 和一个或零个安全标签

如果我们配置多个会话工厂,那么我们应该得到错误

"The content of element type "hibernate-configuration" must match "(session-factory,security?)

所以有人告诉我

  1. hibernate.cfg.xml 文件中 session-factory 标签中的 name 属性有什么用

    <session-factory name="">
    
  2. 我们可以在什么场景下使用它?

4

3 回答 3

7

假设您必须连接到项目中的两个不同数据库,因此您有两个数据源和两个会话工厂。因此它们的名称可以帮助您轻松地管理它们(会话工厂)。

多数据源,多会话工厂

示例:从两个独立的数据源注入两个会话工厂。

@Component
public class TestConfig {

@Autowired
@Qualifier(value="firstSessionFactory")
private SessionFactory sessionFactory;

@Autowired
@Qualifier(value="secondSessionFactory")
private SessionFactory secondDBSessionFactory;

//...

}
于 2020-01-09T14:01:48.893 回答
1

您可以按名称引用会话工厂,特别是如果您有多个配置文件,例如:

更改 cfg.xml 文件中的名称

<bean id="transactionManager1" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory1"/>
    <!-- ... -->
</bean>

<bean id="transactionManager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory2"/>
于 2020-01-09T13:34:15.210 回答
1

当我们必须连接多个数据库时,我们必须为我们创建多个会话工厂创建多个数据源

@Component
public class Config {

@Autowired
@Qualifier(value="FirstSessionFactory")
private SessionFactory firstSessionDB;

@Autowired
@Qualifier(value="SecondSessionFactory")
private SessionFactory secondSessionDB;
// for the third database
@Autowired
@Qualifier(value="thirdSessionFactory")
private SessionFactory thirdSessionDB;

}
于 2020-01-14T11:53:16.100 回答