Spring Hibernate 4中LocalSessionFactoryBean和Hibernate 3中AnnotationSessionFactoryBean之间的差异

Spring Hibernate 4中LocalSessionFactoryBean和Hibernate 3中AnnotationSessionFactoryBean之间的差异,spring,hibernate,Spring,Hibernate,在一个项目中,我们希望将hibernate版本从3.6升级到4.3 在hibernate 3中,我们使用AnnotationSessionFactoryBean: <bean id="AbstractSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" abstract="true"> <!--

在一个项目中,我们希望将hibernate版本从3.6升级到4.3

在hibernate 3中,我们使用AnnotationSessionFactoryBean:

 <bean id="AbstractSessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
        abstract="true">
    <!--  <property name="packagesToScan" value="com.amazon.layout.dao.model" /> -->
    <property name="annotatedClasses">
        <list>
            <value>com.amazon.layout.dao.model.EdgeModel</value>
            <value>com.amazon.layout.dao.model.VertexModel</value>
            <value>com.amazon.layout.dao.model.PhysicalResourceToVertexMappingModel</value>
        </list>
    </property>
    <property name="exposeTransactionAwareSessionFactory">
        <value>true</value>
    </property>
 </bean>

 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="SessionFactory" />
 </bean>

 <!-- Use Spring transactions for Hibernate -->
 <tx:annotation-driven transaction-manager="txManager" mode='aspectj' proxy-target-class='true' />
 </beans>
 <bean id="AbstractSessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
        abstract="true">
    <!--  <property name="packagesToScan" value="com.amazon.layout.dao.model" /> -->
    <property name="annotatedClasses">
        <list>
            <value>com.amazon.layout.dao.model.EdgeModel</value>
            <value>com.amazon.layout.dao.model.VertexModel</value>
            <value>com.amazon.layout.dao.model.PhysicalResourceToVertexMappingModel</value>
        </list>
    </property>
 </bean>

 <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
     <property name="sessionFactory" ref="SessionFactory" />
 </bean>

 <!-- Use Spring transactions for Hibernate -->
 <tx:annotation-driven transaction-manager="txManager" mode='aspectj' proxy-target-class='true' />
</beans>

com.amazon.layout.dao.model.EdgeModel
com.amazon.layout.dao.model.VertexModel
com.amazon.layout.dao.model.PhysicalResourceToVertexMappingModel
真的
在hibernate 4.3中,我们使用LocalSessionFactoryBean:

 <bean id="AbstractSessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
        abstract="true">
    <!--  <property name="packagesToScan" value="com.amazon.layout.dao.model" /> -->
    <property name="annotatedClasses">
        <list>
            <value>com.amazon.layout.dao.model.EdgeModel</value>
            <value>com.amazon.layout.dao.model.VertexModel</value>
            <value>com.amazon.layout.dao.model.PhysicalResourceToVertexMappingModel</value>
        </list>
    </property>
    <property name="exposeTransactionAwareSessionFactory">
        <value>true</value>
    </property>
 </bean>

 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="SessionFactory" />
 </bean>

 <!-- Use Spring transactions for Hibernate -->
 <tx:annotation-driven transaction-manager="txManager" mode='aspectj' proxy-target-class='true' />
 </beans>
 <bean id="AbstractSessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
        abstract="true">
    <!--  <property name="packagesToScan" value="com.amazon.layout.dao.model" /> -->
    <property name="annotatedClasses">
        <list>
            <value>com.amazon.layout.dao.model.EdgeModel</value>
            <value>com.amazon.layout.dao.model.VertexModel</value>
            <value>com.amazon.layout.dao.model.PhysicalResourceToVertexMappingModel</value>
        </list>
    </property>
 </bean>

 <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
     <property name="sessionFactory" ref="SessionFactory" />
 </bean>

 <!-- Use Spring transactions for Hibernate -->
 <tx:annotation-driven transaction-manager="txManager" mode='aspectj' proxy-target-class='true' />
</beans>

com.amazon.layout.dao.model.EdgeModel
com.amazon.layout.dao.model.VertexModel
com.amazon.layout.dao.model.PhysicalResourceToVertexMappingModel
  • 这两个相等吗
  • LocalSessionFactoryBean中没有exposeTransactionAwareSessionFactory属性。安全吗

  • LocalSessionFactoryBean
    的javadocs中:

    该类在角色上与orm.hibernate3包中的同一命名类类似。然而,在实践中,它更接近AnnotationSessionFactoryBean,因为它的核心目的是从包扫描引导SessionFactory


    LocalSessionFactoryBean
    没有公开该方法的原因是它不必要。
    LocalSessionFactoryBean的javadocs中的:

    该类在角色上与orm.hibernate3包中的同一命名类类似。然而,在实践中,它更接近AnnotationSessionFactoryBean,因为它的核心目的是从包扫描引导SessionFactory


    LocalSessionFactoryBean
    不公开该方法的原因是它不必要。

    您能解释一下为什么属性exposeTransactionAwareSessionFactory对LocalSessionFactoryBean不必要吗?因为Spring会自动使用
    SpringSessionContext
    在Hibernate 3中,它是可配置的,用户可以在其中禁用此功能。非常感谢。@Naros您能解释一下。。。ts的核心目的是从包扫描引导SessionFactory@BhargavPatel当定义
    LocalSessionFactoryBean
    时,您可以指定几个属性,例如packagesToScan、annoatedClasses、annotatedPackages等,bean会将这些信息直接传递给Hibernate,允许您基本上使用
    LocalSessionFactoryBean
    ,就像在Spring的旧版本中使用
    AnnotationSessionFactoryBean
    一样。您能解释一下为什么LocalSessionFactoryBean不需要exposeTransactionAwareSessionFactory属性吗?因为Spring会自动设置
    CURRENT\u SESSION\u CONTEXT\u CLASS
    SpringSessionContext
    一样,在Hibernate 3中,它是可配置的,用户可以在其中禁用此功能。非常感谢。@Naros您能解释一下。。。ts的核心目的是从包扫描引导SessionFactory@BhargavPatel当定义
    LocalSessionFactoryBean
    时,您可以指定几个属性,例如packagesToScan、annoatedClasses、annotatedPackages等,bean会将这些信息直接传递给Hibernate,允许您基本上使用
    LocalSessionFactoryBean
    ,使用方式与Spring遗留版本中的
    AnnotationSessionFactoryBean
    基本相同。