我习惯在我的项目中使用persistence.xml来定义要使用的提供程序(在大多数情况下是hibernate)。
但是,我正在开始一个新项目,必须使用Spring框架。我看过一些博客描述了Spring中Hibernate的集成,我知道我应该在spring的bean描述符中声明一个会话工厂org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
我见过的所有示例都没有提到使用persistence.xml,持久化上下文,实体管理器......
我不确定我是否理解这一点,我一直认为Hibernate只是JPA的提供者,除非在application-context.xml中声明的工厂在后台做了一些事情。如果是这样的话,我想了解它是如何运作的。
提前感谢...
答案 0 :(得分:3)
AnnotationSessionFactoryBean是Spring实现的Factory bean,用于创建Hibernate Session Factory并共享给Spring的Application Context。如果你打算使用Direct Hibernate(如果你不需要persistent.xml / per-cont.xml / entityManager),你可以提供AnnotationSession FactoryBean中的属性。并且可以注入任何DAO。
如果你正计划通过JPA。然后你需要(持久性和持久性上下文和实体管理器)。为此,您需要三个步骤
1.声明/配置Spring的JPA适配器为你创建EntityManager实例
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
在JPA Bean声明中提供了有关您的数据库的详细信息,以及在您的情况下Hibernate
是什么是ORM提供程序,如(hibernate / toplink / ....)<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9Dialect"/>
</bean>
</property>
然后以persistent.xml或某种方式提供有关持久性实体详细信息的信息
<property name="persistenceXmlLocation" value="classpath:persistence.xml" />
如果您有任何特定的JPA属性,那么
<property name="jpaProperties">
<props>
<!-- <prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
-->
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.use_sql_comments">false</prop>
</props>
</property>
总而言之,Spring直接向Hibernate提供适配器(在这种情况下你不需要jpa文件,例如persistent.xml等等,但你需要hibernate相关的文件,比如hbm文件)或适配器到JPA(在这种情况下,你有提供有关谁是JPA供应商和instrut如何连接到JPA供应商的详细信息。
希望以上澄清。