2013-12-23 61 views
1

我習慣於在我定義要使用的提供程序(大多數情況下爲休眠)的項目中使用persistence.xml。Spring應用程序中的persistence.xml

但是,我開始了一個新項目,其中強制使用Spring框架。我見過一些博客描述了Spring在Spring中的集成,並且我已經瞭解到我應該在spring的bean描述符中聲明會話工廠org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

我見過的所有示例都沒有提到持久性的使用。 xml,持久性上下文,實體管理器...

我不確定我是否理解這一點,我一直認爲Hibernate只是JPA的提供者,除非在application-context.xml中聲明的工廠正在做一些背景。如果是的話,我想了解它是如何工作..提前

感謝...

回答

3

AnnotationSessionFactoryBean是工廠bean由Spring實現創建Hibernate的Session工廠和共享Spring的應用程序上下文。如果您打算使用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聲明提供詳細信息有關數據庫和誰ORM提供程序,如(休眠/ 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> 

然後提供有關您的持久實體deta在persistent.xml或某種方式ILS

<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> 


底線,春provies適配器直接到Hibernate(在如果您不需要Jpa文件(如persistent.xml等),但您需要hibernate相關文件(如hbm文件)或適配器到JPA(在這種情況下,您提供了有關誰是JPA供應商的詳細信息)支撐彈簧如何連接到JPA供應商)。


希望以上澄清。

+0

感謝您的回答:-),使用Direct Hibernate意味着什麼。在我看來,首先必須使用JPA並選擇一個提供者。在實體中映射註釋不是Hibernate註釋。對不起,但我仍然有點困惑... – javaxiss

+0

我們可以通過使用hbm或hibernate註釋來實現帶有hibernatr的orm,沒有jpa.jpa的sessionfactory是orm的通用規範,並且它提供的接口不是實現。如果你實現使用休眠,你不能輕鬆地切換到其他的ORM工具,如toplink,ibatis和do ..但是如果您使用jpa和jpa註釋來實現,那麼您的應用將會非常友好地耦合。所以它不能輕鬆地切換任何orm而不改變代碼(在春天,你只需要改變confuguration來提供執行) – Mani

+0

在netshell中它就像usibg jpa類似於使用接口和usibg hibernate類似於綁定到Concerte類。 。 – Mani