Spring应用程序中的persistence.xml

时间:2013-12-23 13:13:52

标签: spring hibernate jpa sessionfactory persistence.xml

我习惯在我的项目中使用persistence.xml来定义要使用的提供程序(在大多数情况下是hibernate)。

但是,我正在开始一个新项目,必须使用Spring框架。我看过一些博客描述了Spring中Hibernate的集成,我知道我应该在spring的bean描述符中声明一个会话工厂org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

我见过的所有示例都没有提到使用persistence.xml,持久化上下文,实体管理器......

我不确定我是否理解这一点,我一直认为Hibernate只是JPA的提供者,除非在application-context.xml中声明的工厂在后台做了一些事情。如果是这样的话,我想了解它是如何运作的。

提前感谢...

1 个答案:

答案 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供应商的详细信息。


希望以上澄清。