spring集成JPA的三種方法配置

来源:http://www.cnblogs.com/gsyun/archive/2017/06/28/7088620.html
-Advertisement-
Play Games

JPA是Java EE5規範之一,是一個orm規範,由廠商來實現該規範。目前有hibernate,OpenJPA,TopLink和EclipseJPA等實現 spring提供三種方法集成JPA:1、LocalEntityManagerFactoryBean:適用於那些僅使用JPA進行數據訪問的項目。 ...


JPA是Java EE5規範之一,是一個orm規範,由廠商來實現該規範。目前有hibernate,OpenJPA,TopLink和EclipseJPA等實現


spring提供三種方法集成JPA:
1、LocalEntityManagerFactoryBean:適用於那些僅使用JPA進行數據訪問的項目。該FactoryBean根據 JPA PersistenceProvider自動檢測配置文件進行工作,一般從“META-INF/persistence.xml”讀取配置信息。這種方式最簡單,但是不能設置Spring中定義的DataSource,且不支持Spring管理的全局事務。不建議使用此方式。這種方法實際上只適用於獨立的應用程式和測試環境(這正是JPA規範設計它的原因)。
在Spring中的配置:

<bean id=”entityManagerFactory” class=”org.springframework.orm.jpa.LocalEntityManagerFactoryBean”>
<property name=”persistenceUnitName” value=”persistenceUnit”/>
</bean>


2、從JNDI中獲取:用於從Java EE伺服器中獲取指定的EntityManagerFactory,這種方式在Spring事務管理時一般要使用JTA事務管理
Spring中的配置:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/persistenceUnit"/>
</beans>

 


在標準的java EE 5啟動過程中,Java EE伺服器自動檢測持久化單元(例如應用程式文件包中的META-INF/persistence.xml) ,以及java ee部署描述符中定義給那些持久化單元命名上下文位置的環境的persistence-unit-ref項(例如web.xml)。
在這種情況下,整個持久化單元部署,包括持久化類的織入(字碼碼轉換)都取決於Java EE伺服器。 JDBC DataSource 通過在META-INF/persistence.xml 文件中的JNDI位置進行定義;EntityManager事務與伺服器的JTA子系統整合。Spring僅僅用獲得的 EntityManagerFactory, 通過依賴註入將它傳遞給應用程式對象,併為它管理事務(一般通過JtaTransactionManager)。
註意,如果在同一個應用程式中使用了多個持久化單元,JNDI獲取的這種持久化單元的bean名稱 應該與應用程式用來引用它們的持久化單元名稱相符(例如@PersistenceUnit和 @PersistenceContext註解)。
在部署到Java EE 5伺服器時使用該方法。關於如何將自定義JPA提供者部署到伺服器,以及允許使用伺服器提供的預設提供者之外的JPA提供者,請查看伺服器文檔的相關說明。

3、LocalContainerEntityManagerFactoryBean:適用於所有環境的FactoryBean,能全面控制EntityManagerFactory配置,非常適合那種需要細粒度定製的環境。
該bean有以下屬性:
persistenceUnitManager:用於獲取JPA持久化單元,預設實現DefaultPersistenceUnitManager用於解決多配置文件情況。
dataSource:用於指定Spring定義的數據源。
persistenceXmlLocation:用於指定JPA配置文件,對於多JPA配置文件情況請選擇設置persistenceUnitManager屬性來解決。
persistenceUnitName:用於指定持久化單元名稱。
persistenceProvider:用於指定持久化實現廠商類,如hibernate為:org.hibernate.ejb.HibernateProvider 類。
jpaVendorAdapter:用於設置JPA實現廠商的特定屬性,如設置hibernate的是否自動生成DDL的屬性generateDdl,這些屬性是廠商特定的,因此最好在這裡設置。目前spring提供HibernateJpaVendorAdapter,OpenJpaVendorAdapter,EclipseJpaVendorAdapter,TopLinkJpaVenderAdapter四個實現。其中最主要的屬性是“database”,用來指定使用的資料庫類型。從而根據資料庫類型決定如何將資料庫特定異常轉換為Spring一致性異常。目前支持以下資料庫:DB2,DERBY,H2,HSQL,INFORMIX,MySQL,Oracle,POSTGRESQL,SQL_SERVER,SYBASE
jpaDialect:用於指定一些高級特性,如事務管理等。目前Spring提供HibernateJpaDialect,OpenJpaDialect,EclipseJpaDialect,TopLinkJpaDialect和DefaultJpaDialect實現。註意DefaultJpaDialect不提供任何功能,因此在使用特定實現廠商的JPA實現時需要指定jpaDialect實現,如使用hibernate就使用HibernateJpaDialect。當指定jpaVendorAdapter屬性時可以不指定jpaDialect,會自動設置相應的JpaDialect實現;
jpaProperties和jpaPropertyMap:指定JPA屬性;如Hibernate中指定是否顯示SQL的“hibernate.show_sql”屬性,對於jpaProperties設置的屬性自動會放進jpaPropertyMap中;
loadTimeWeaver:用於指定LoadTimeWeaver實現,從而允許JPA 載入時修改相應的類文件。具體使用得參考相應的JPA規範實現廠商文檔,如Hibernate就不需要指定loadTimeWeaver。


JPA配置實例:

spring4.2.5
spring-data-jpa 1.10.2.RELEASE
hibernate-core 4.3.7.Final
hibernate-entitymanager 4.3.7.Final


spring-context.xml:

 1 <!--JPA 配置 start-->
 2     <!-- 實體管理器-->
 3     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
 4         <!-- 指定數據源 -->
 5         <property name="dataSource" ref="dataSource"/>
 6         <property name="persistenceProvider" ref="persistenceProvider" />
 7 
 8         <!-- 指定Entity實體類包路徑 -->
 9         <property name="packagesToScan" >
10             <array>
11                 <value>com.path.to.entity</value>
12                 <value>path.to.entity</value>
13             </array>
14         </property>
15         <!-- 指定Jpa持久化實現廠商類-->
16         <property name="jpaVendorAdapter">
17             <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
18                 <property name="generateDdl" value="false" />
19                 <property name="database" value="MYSQL" />
20                 <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
21 
22                  <property name="showSql" value="false" />
23             </bean>
24         </property>
25         <!-- 指定JPA屬性-->
26         <property name="jpaPropertyMap">
27             <map>
28                 <entry key="hibernate.query.substitutions" value="true 1, false 0" />
29                 <entry key="hibernate.default_batch_fetch_size" value="16" />
30                 <entry key="hibernate.max_fetch_depth" value="2" />
31                 <entry key="hibernate.generate_statistics" value="false" />
32                 <entry key="hibernate.bytecode.use_reflection_optimizer" value="true" />
33 
34                 <entry key="hibernate.cache.use_query_cache" value="false" />
35                 <entry key="hibernate.cache.use_second_level_cache" value="false" />
36 
37                 <entry key="hibernate.enable_lazy_load_no_trans" value="true"/>
38                 <!--資料庫欄位名稱映射規則 acb_id自動轉abcId-->
39                 <entry key="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
40                 <!--<entry key="hibernate.hbm2ddl.auto" value="validate"/>-->
41             </map>
42         </property>
43     </bean>
44     <bean id="persistenceProvider" class="org.hibernate.jpa.HibernatePersistenceProvider"/>
45     <!-- dao包-->
46     <jpa:repositories base-package="com.path.to.dao,com.path.to.dao2" repository-impl-postfix="Impl" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>

 

LocalContainerEntityManagerFactoryBean:指定使用本地容器管理EntityManagerFactory,從而進行細粒度控制;
dataSource屬性指定使用Spring定義的數據源;
persistenceUnitName指定持久化單元名字,即JPA配置文件中指定的;
persistenceProvider:指定JPA持久化提供商,此處使用Hibernate實現HibernatePersistence類;
jpaVendorAdapter:指定實現廠商專用特性,即generateDdl= false表示不自動生成DDL,database= HSQL表示使用hsqldb資料庫;
jpaDialect:如果指定jpaVendorAdapter此屬性可選,此處為HibernateJpaDialect;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引言 Postman 是一個用來測試Web API的Chrome 外掛軟體,可由google store 免費取得並安裝於Chrome里,對於有在開發Web API的開發者相當有用,省掉不少寫測試頁面呼叫的工作,通常我們看到的使用情境多數是直接呼叫Web API而未隨著Request發送相關所需參數 ...
  • 一、Chart(Winform) 使用圖表控制項(chart)首先要理解圖表區域(ChartArea)、XY軸(AxisX、AxisY)、數據點(Series)、標題(Title)、圖例(Legend)這幾個之間的層次關係。 圖1:柱形圖 從圖1可以中內容,可以對Chart控制項的組成有了一個簡單的瞭解 ...
  • 古人雲:溫故而知新。這是極好的,近來,作為一個小白,利用點空閑時間把之前幾個月自己寫過的一個作為練手的一個OA系統又重新拿來溫習一番,希望在鞏固基礎之上能得到新的啟示。現在回想起來,之前一個人,寫寫停停,不覺感嘆,平時工作中團隊的重要性以及個人力量的渺小。因為是練手的項目,整個系統從資料庫到前端都是 ...
  • 上一篇講了從創建應用程式域到創建ISAPIRuntime實例的過程,本篇繼續講Asp.net處理第一次請求的必要的初始化過程。 ISAPIRuntime分析 ISAPIRuntime在System.Web.Hosting中實現,它的ProcessRequest是我們處理web請求的入口。 註意方法的 ...
  • Entity Framework支持的查詢方式有三種 LINQ to Entities Entity SQL Native SQL 【LINQ to Entities】 LINQ(語言集成查詢)是從Visual Studio 2008開始引入的功能,在C 中可以使用LINQ查詢不同的數據源。LINQ ...
  • Java對象及其引用 關於對象與引用之間的一些基本概念。 初學Java時,在很長一段時間里,總覺得基本概念很模糊。後來才知道,在許多Java書中,把對象和對象的引用混為一談。可是,如果我分不清對象與對象引用, 那實在沒法很好地理解下麵的面向對象技術。把自己的一點認識寫下來,或許能讓初學Java的朋友 ...
  • 局部變數 成員變數 類變數 Java局部變數 局部變數聲明在方法、構造方法或者語句塊中; 局部變數在方法、構造方法、或者語句塊被執行的時候創建,當它們執行完成後,變數將會被銷毀; 訪問修飾符不能用於局部變數; 局部變數只在聲明它的方法、構造方法或者語句塊中可見; 局部變數是在棧上分配的。 局部變數沒 ...
  • Spring 對 JPA 的支持已經非常強大,開發者只需關心核心業務邏輯的實現代碼,無需過多關註 EntityManager 的創建、事務處理等 JPA 相關的處理。Spring Data JPA更是能夠根據方法名字自動實現持久層。 目標 這次我們的目標還是實現前面幾節的功能,即對Category的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...