gpt4 book ai didi

java - 多个SessionFactory/TransactionManager : no session found for current thread

转载 作者:行者123 更新时间:2023-11-30 07:34:40 25 4
gpt4 key购买 nike

我有两个并行运行的数据库。

我创建了两个配置,每个配置具有不同的 GenericDAO/SessionFactory,但是要实例化的第二个 SessionFactory 存在问题。当我尝试 getCurrentSession() 时,出现此错误:org.hibernate.HibernateException: 未找到当前线程的 session

Config1.xml:

<bean id="mainDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/main" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>

<bean id="mainSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="mainDataSource" />
<property name="annotatedClasses">
<list>
<value>com.avocat.domain.entities.main.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

<bean id="mainTransactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="dataSource" ref="mainDataSource" />
<property name="sessionFactory" ref="mainSessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="mainTransactionManager" />
<context:annotation-config />

Config2.xml:

<bean id="fakeDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/fake" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>

<bean id="fakeSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="fakeDataSource" />
<property name="annotatedClasses">
<list>
<value>com.avocat.domain.entities.intra.Bla</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

<bean id="fakeTransactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="dataSource" ref="fakeDataSource" />
<property name="sessionFactory" ref="fakeSessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="fakeTransactionManager" />
<context:annotation-config />

MainGenericDAO:

@Autowired
@Qualifier("mainSessionFactory")
private SessionFactory mainSessionFactory;

protected Session currentSession()
{
return mainSessionFactory.getCurrentSession();
}

FakeGenericDAO:

@Autowired
@Qualifier("fakeSessionFactory")
private SessionFactory fakeSessionFactory;

protected Session currentSession()
{
return fakeSessionFactory.getCurrentSession();
}

Config1 在 Config2 之前声明。
此外,使用 MainGenericDAO/MainSessionFactory 的查询也可以。但是 FakeGenericDAO 的 currentSession() 返回错误。

最佳答案

看来该交易并未在您的第二个 DAO 上为 FakeSessionFactory 创建。您必须在 FakeGenericDAO 上使用 @Transactional("fakeTransactionManager")

关于java - 多个SessionFactory/TransactionManager : no session found for current thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35565515/

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