【问题标题】:Using two transaction managers and session factories with spring & hibernate annotations使用带有 spring 和 hibernate 注释的两个事务管理器和会话工厂
【发布时间】:2011-11-25 16:38:28
【问题描述】:

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

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

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

    <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>

任何指针?

【问题讨论】:

    标签: java hibernate spring


    【解决方案1】:

    对于不使用注释的旧数据库,您应该使用LocalSessionFactoryBean 而不是AnnotationSessionFactoryBean。 AnnotationSessionFactoryBean 的全部目的是使用注解。如果你不想使用注解,LocalSessionFactoryBean 是不错的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2011-12-24
      相关资源
      最近更新 更多