使用两个事务管理器和会话工厂与spring&休眠注释

时间:2011-11-25 16:38:29

标签: java hibernate spring

我在applicationContext中定义了两个事务管理器,引用了两个完全不同的sessionFactories。我试图在其中一个事务管理器上使用注释,但它似乎将所有注释都应用于两个事务管理器。

我要迁移的新数据库有<property name="hbm2ddl.auto">create</property>,而我迁移的另一个数据库有<property name="hbm2ddl.auto">validate</property>

我用@Entity注释了我的新域对象hibernate试图在遗留数据库上验证这些类,我认为我已经设置了忽略注释(通过不指定注释)。以下是appContext的相关摘要:

    <tx:annotation-driven transaction-manager="transactionManager1" />
    <context:property-placeholder location="file:${catalina.home}/conf/database.properties" ignore-unresolvable="true"/>

    <bean id="sessionFactory1" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-ref="dataSource1" p:configLocation="WEB-INF/classes/hibernate.cfg.xml" p:packagesToScan="com.mycompany"/>

<!-- Declare a datasource that has pooling capabilities-->   
<bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
p:driverClass="${app.driverClassName}" p:jdbcUrl="${app.url}" 
p:user="${app.username}" p:password="${app.password}"

    <!-- Declare a transaction manager-->
    <bean id="transactionManager1" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory1" />

和同一appContext中的遗留数据库:

<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"    p:dataSource-ref="dataSource2" p:configLocation="WEB-INF/classes/hibernateTraveller.cfg.xml" p:packagesToScan="com.mycompany"/>

<!-- Declare a datasource that has pooling capabilities-->   
<bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
p:driverClass="${app2.driverClassName}" p:jdbcUrl="${app2.url}" 
p:user="${app2.username}" p:password="${app2.password}"

<!-- Declare a transaction manager-->
<bean id="transactionManager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
            p:sessionFactory-ref="sessionFactoryTraveller"> 
<qualifier value="legacyDB"/>
</bean>

任何指针?

1 个答案:

答案 0 :(得分:1)

对于不使用注释的旧数据库,您应该使用LocalSessionFactoryBean而不是AnnotationSessionFactoryBean。 AnnotationSessionFactoryBean的用途是使用注释。如果您不想使用注释,可以使用LocalSessionFactoryBean。