Spring Hibernate 4中LocalSessionFactoryBean和Hibernate 3中AnnotationSessionFactoryBean之间的差异
在一个项目中,我们希望将hibernate版本从3.6升级到4.3 在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"> <!--
<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
的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
基本相同。