スタンドアロン アプリケーションで 2 つのデータベースを使用する必要があります。1 つはローカルの HSQLDB で、もう 1 つはリモートの MySQL です。Spring 3.1.2、Hibernate 4.1.7 を使用しています。これまでのところ、私は HSQLDB のみを使用することができました。これは私の DAO と構成がどのように見えるかです。
@Transactional
public abstract class HibernateDao<T, ID extends Serializable> implements Dao<T, ID>{
SessionFactory sessionFactoryHSQL;
public void setSessionFactoryHSQL(SessionFactory sessionFactory) {
this.sessionFactoryHSQL = sessionFactory;
}
public ID save(T object) {
return (ID) getCurrentSession().save(object);
}
public void persist(T object){
getCurrentSession().persist(object);
}
public void update(T object) {
getCurrentSession().update(object);
}
public void delete(T object) {
getCurrentSession().delete(object);
}
public List<T> find(String query) {
return getCurrentSession().createQuery(query).list();
}
public Session getCurrentSession(){
return sessionFactoryHSQL.getCurrentSession();
}
}
<bean id="sessionFactoryHSQL"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSourceHSQL"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
//annotated classes
</list>
</property>
</bean>
<bean id="txManager" class=
"org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryHSQL" />
</bean>
<tx:annotation-driven transaction-manager="txManagerHSQL" />
<bean id="configHSQL"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>properties/HSQL.properties</value>
</property>
</bean>
<bean id="dataSourceHSQL"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
sessionFactoryMySQL、dataSourceMySQL など、MySQL 用に個別の Bean を作成しました (HSQL の場合とほぼ同じであるため、それらの実装は貼り付けません)。sessionFactoryMySQL を DAO に正しく挿入できましたが、両方の sessionFactory を同時に使用することはできません。たとえば、次のことはできません。
public void persist(T object) {
sessionFactoryHSQL.getCurrentSession().persist(object);
sessionFactoryMySQL.getCurrentSession().persist(object);
}
すでに発見したように、トランザクションと関係がありますが、トランザクションマネージャーを適切に構成できません。私は長い間解決策を探してきましたが、例やチュートリアルは明確でなかったか、私のケースを正確に参照していませんでした.