Spring应用程序中的persistence.xml

Spring应用程序中的persistence.xml,spring,hibernate,jpa,sessionfactory,persistence.xml,Spring,Hibernate,Jpa,Sessionfactory,Persistence.xml,我习惯在项目中使用persistence.xml,在项目中我定义了要使用的提供者(大多数情况下是hibernate) 然而,我正在启动一个新项目,其中必须使用Spring框架。我看过一些描述Spring中Hibernate集成的博客,我知道我应该在Spring的beans描述符org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 我看到的所有示例都没有提到persistence.xml、persist

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

然而,我正在启动一个新项目,其中必须使用Spring框架。我看过一些描述Spring中Hibernate集成的博客,我知道我应该在Spring的beans描述符
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

我看到的所有示例都没有提到persistence.xml、persistence context、entity manager

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


先谢谢你

AnnotationSessionFactoryBean是Spring实现的工厂bean,用于创建Hibernate会话工厂,并共享给Spring的应用程序上下文。如果您计划使用直接Hibernate(如果您不需要persistent.xml/per-cont.xml/entityManager),则可以在AnnotationSession FactoryBean中提供属性。并且可以注射到任何DAO中
如果你打算通过JPA连线,那该怎么办呢。然后您需要(持久性和持久性上下文和实体管理器)。为此,您需要三个步骤
1.声明/配置Spring的JPA适配器,以便为您创建EntityManager实例

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">


在JPABean声明中,提供有关数据库和谁是ORM提供者的详细信息,例如(hibernate/toplink/…)在hibernate中

<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的适配器(在这种情况下,您不需要诸如persistent.xml之类的Jpa文件,但需要与Hibernate相关的文件,如hbm文件)或到Jpa的适配器(在这种情况下,您提供了关于谁是Jpa供应商以及如何连接到Jpa供应商的详细信息)



希望以上内容能够澄清。

谢谢您的回答:-),您使用Direct Hibernate是什么意思。在我看来,首先必须使用JPA,然后选择提供商。实体中的映射注释不是Hibernate注释。抱歉,但我仍然有点困惑…我们只能通过使用hbm或hibernate注释来实现带有Hibernater的orm,没有jpa的sessionfactory。jpa是orm的常见规范,它提供接口而不是实现。如果您使用hibernate实现,则无法轻松切换到其他orm工具,例如toplink、ibatis和do。。但是如果您使用jpa和jpa注释实现,那么您的应用程序将耦合得很差。因此,在netshell中,在不更改代码的情况下切换任何orm都是不容易的(在春季,您只需更改配置以提供实现),就像usibg jpa类似于使用接口,usibg hibernate类似于绑定到concerte类。