gpt4 book ai didi

java - 在 Hibernate 中动态创建 SessionFactory

转载 作者:搜寻专家 更新时间:2023-10-30 22:11:48 24 4
gpt4 key购买 nike

在我的应用程序中,每个客户端都有多个数据库。我想根据登录我的应用程序的客户端访问数据库。

有两种选择:
1) 在 hibernate-config.xml 文件中使用多个 SessionFactory 条目。
2) 复制 hibernate pojo 文件。

但我想在运行时创建所有这些 LocalSessionFactoryBean、SessionFactory、TransactionManager。那我该怎么做呢? 我不想在 hibernate-config.xml 文件中做多个 SessionFactory 和 DataSource 条目。

我试过下面的代码片段。

@Configuration
@EnableTransactionManagement
public class PersistenceHibernateConfig
{

private String driverClassName;

private String url;

String hibernateDialect;

boolean hibernateShowSql;

@Bean
public LocalSessionFactoryBean alertsSessionFactoryBean()
{
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(this.restDataSource());
sessionFactory.setPackagesToScan(new String[] { "com.ezdi.cac.bean.table" });
sessionFactory.setHibernateProperties(this.hibernateProperties());

return sessionFactory;
}

@Bean
public DataSource restDataSource()
{
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(this.driverClassName);
dataSource.setUrl(this.url);
dataSource.setUsername("root");
dataSource.setPassword("root");

return dataSource;
}

@Bean
public HibernateTransactionManager transactionManager()
{
final HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(this.alertsSessionFactoryBean().getObject());

return txManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslationPostProcessor()
{
return new PersistenceExceptionTranslationPostProcessor();
}

@Bean
public PersistenceExceptionTranslator exceptionTranslator()
{
return new HibernateExceptionTranslator();
}

final Properties hibernateProperties()
{
return new Properties()
{
{
this.put("persistence.dialect", PersistenceHibernateConfig.this.hibernateDialect);
this.put("hibernate.show_sql", PersistenceHibernateConfig.this.hibernateShowSql);
}
};

}

/**
* @return the driverClassName
*/
public String getDriverClassName()
{
return driverClassName;
}

/**
* @param driverClassName the driverClassName to set
*/
public void setDriverClassName(String driverClassName)
{
this.driverClassName = driverClassName;
}

/**
* @return the url
*/
public String getUrl()
{
return url;
}

/**
* @param url the url to set
*/
public void setUrl(String url)
{
this.url = url;
}

/**
* @return the hibernateDialect
*/
public String getHibernateDialect()
{
return hibernateDialect;
}

/**
* @param hibernateDialect the hibernateDialect to set
*/
public void setHibernateDialect(String hibernateDialect)
{
this.hibernateDialect = hibernateDialect;
}

/**
* @return the hibernateShowSql
*/
public boolean isHibernateShowSql()
{
return hibernateShowSql;
}

/**
* @param hibernateShowSql the hibernateShowSql to set
*/
public void setHibernateShowSql(boolean hibernateShowSql)
{
this.hibernateShowSql = hibernateShowSql;
}

}

但是每当我通过 LocalSessionFactoryBean 以及通过 HibernateTransactionManager 获取 SessionFactory 时,我得到的都是 null。我不知道为什么会得到 null?

最佳答案

您应该看看针对此要求量身定制的 Hibernate Multi-Tenancy。从 Hibernate 4.x 开始,它是可用的,建议使用它而不是使用多个 SessionFactory。请通过这个 post .

关于java - 在 Hibernate 中动态创建 SessionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com