gpt4 book ai didi

nhibernate - 多个数据库提供者 - 没有可用的数据库提供者

转载 作者:行者123 更新时间:2023-12-03 16:49:18 25 4
gpt4 key购买 nike

我在我的 spring 配置中配置了两个数据库提供程序,如下所示(分布在两个不同的文件中)

<db:provider id="FirstDbProvider"
provider="MySql" connectionString="Database=xxxxxxx;Host=xxxxxxx;Username=xxxxxxx;Password=xxxxxxxxx"/>

<db:provider id="SecondDbProvider"
provider="MySql" connectionString="Database=xxxxxxx;Host=xxxxxxx;Username=xxxxxxx;Password=xxxxxxxxx"/>

但是当我尝试运行我的应用程序时,它在创建使用 SecondDBProvider 的 sessionFactory 时失败了。我明白了

“文件 [Second.Dao.xml] 第 21 行”中定义的 SecondSessionFactory:对象初始化失败:没有可用的数据库提供程序,无法创建连接

我应该可以这样使用两个 DB Provider 吗?任何可能导致此错误的想法。我可以使用我的数据库提供程序中指定的凭据等从命令行连接到数据库。

如果我回到只有一个数据库,它会完美地工作。我可以将第二个 db:provider 添加到我的 spring.dao.xml 文件中,它仍然有效(即我可以从第一个数据库中检索一个实体)。只有当我添加第二个 sessionFactory 时它才会停止工作并且我无法检索任何内容,甚至无法从第一个数据库中检索到任何内容。

所以,我猜某处可能正在共享某些内容并导致冲突

更新

这是配置(出于显而易见的原因,我重命名了一些东西)

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database">

<!-- Referenced by main application context configuration file -->
<description>
Config for Database 1
</description>

<!-- Property placeholder configurer for database settings -->
<object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="ConfigSections" value="databaseSettings"/>
</object>

<!-- Database Configuration -->
<db:provider id="FirstDbProvider"
provider="MySql"
connectionString="Database=xxxxx;Host=xxxxxxx;Username=xxxxxx;Password=xxxxxx"/>

<!-- NHibernate Configuration -->
<object id="FirstSessionFactory" type="Utils.Hibernate.CustomLocalSessionFactoryObject, Utils">
<property name="DbProvider" ref="FirstDbProvider"/>
<property name="MappingAssemblies">
<list>
<value>FirstDao.Dao</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MySQLDialect"/>
<entry key="connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/>
<entry key="use_proxy_validator" value="false" />
<entry key="show_sql" value="true"/>
<entry key="format_sql" value="false"/>
<entry key="generate_statistics" value="false"/>
<entry key="adonet.batch_size" value="20"/>
<entry key="hbm2ddl.auto" value="update"/>
<entry key="prepare_sql" value="true"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>


<!-- Transaction Management Strategy - local database transactions -->
<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32">

<property name="DbProvider" ref="FirstDbProvider"/>
<property name="SessionFactory" ref="FirstSessionFactory"/>

</object>

<!-- Exception translation object post processor -->
<object type="Spring.Dao.Attributes.PersistenceExceptionTranslationPostProcessor, Spring.Data"/>

<!-- Data Access Objects -->
<object id="firstDao" type="FirstDao.Dao.MyDao, HRDataCheck.Dao">
<property name="SessionFactory" ref="FirstSessionFactory"/>
</object>

</objects>

这是我的第二个文件(用于其他 DBProvider)

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database">


<!-- Database Configuration -->
<db:provider id="SecondDbProvider"
provider="MySql"
connectionString="Database=xxxxxx;Host=xxxxxx;Username=xxxxx;Password=xxxxxxxx"/>

<!-- NHibernate Configuration -->
<object id="SecondSessionFactory" type="Utils.Hibernate.CustomLocalSessionFactoryObject, Utils">
<property name="DbProvider" ref="SecondDbProvider"/>
<property name="MappingAssemblies">
<list>
<value>SecondDao.Dao</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MySQLDialect"/>
<entry key="connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/>
<entry key="use_proxy_validator" value="false" />
<entry key="show_sql" value="true"/>
<entry key="format_sql" value="false"/>
<entry key="generate_statistics" value="false"/>
<entry key="adonet.batch_size" value="20"/>
<entry key="prepare_sql" value="true"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>


<!-- Data Access Objects -->
<object id="secondDao" type="Blah.SecondDao, SecondDaoAssembly">
<property name="SessionFactory" ref="SecondSessionFactory"/>
</object>

</objects>

最佳答案

这是您的问题:您没有为 SecondSessionFactory 设置事务管理。

<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32">
<property name="DbProvider" ref="FirstDbProvider"/>
<property name="SessionFactory" ref="FirstSessionFactory"/>

</object>

尝试 <!--Transaction Management Strategy - local database transactions-->
<object id="transactionManager" type="Spring.Data.Core.TxScopeTransactionManager, Spring.Data">
<property name="TransactionSynchronization" value="Always"/>
</object>

关于nhibernate - 多个数据库提供者 - 没有可用的数据库提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031224/

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