解決persistence.xml配置文件修改存放路徑的問題
persistence.xml配置文件修改存放路徑
今天整合Spring、struts2和Spring Data JPA的時(shí)候遇到以下問題,現(xiàn)記錄以供參考。
<!-- 定義實(shí)體管理工廠bean --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="demo" /> <property name="persistenceXmlLocation" value="classpath:persistence.xml" /> </bean>
按以上代碼配置實(shí)體管理工廠時(shí)將會拋出異常,大意就是找不到persistence.xml文件。
因?yàn)槲业膒ersistence.xml文件是放在與src同級的resource文件夾內(nèi)的,而默認(rèn)會去src下META-INF文件夾加載該配置文件。
解決辦法有兩種
1、第一種:
將persistence.xml文件移至src/META-INF/下,若不存在該文件夾則手動創(chuàng)建;
2、第二種:
org.springframework.orm.jpa.LocalEntityManagerFactoryBean
改為
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
如果要了解實(shí)現(xiàn)原理,請自行查看源碼。
持久化persistence.xml配置文件
在EJB中,一個(gè)實(shí)體Bean應(yīng)用由實(shí)體類和persistence.xml文件文件組成。persistence.xml文件在jar文件的META-INF目錄下。persistence.xml文件指定實(shí)體Bean使用的數(shù)據(jù)源及Entity Manager對象的默認(rèn)行為。
我們來看一個(gè)最簡單的persistence.xml文件,了解一下它的配置。
<persistence> ? <!-- Name屬性用于定義持久化單元的名字 (name必選,空值也合法) --> ? <persistence-unit name="foshanshop">?? ? ? <!-- Jta-data-source 用于指定持久化提供商使用的JTA數(shù)據(jù)源的全局JNDI名稱(可選) -->? ? ? <jta-data-source>java:/DefaultMySqlDS</jta-data-source>?? ? ? <!-- 廠商專有屬性(可選) -->? ? ? <properties>? ?? ? ? ? <!--自動輸出schema創(chuàng)建DDL語句 --> ? ? ? <property name="hibernate.hbm2ddl.auto" value="create-drop"/>? ? ?? ? ? </properties>? ?? ? </persistence-unit>?? </persistence>
persistence-unit
:節(jié)點(diǎn)可以有一個(gè)或多個(gè),每個(gè)persistence-unit 節(jié)點(diǎn)定義了持久化內(nèi)容名稱、使用的數(shù)據(jù)源以及持久化產(chǎn)品的專有屬性。name
:屬性定義持久化名稱。jta-data-source
:節(jié)點(diǎn)指定實(shí)體Bean使用的數(shù)據(jù)源JNDI名稱,如果應(yīng)用發(fā)布在jboss下,數(shù)據(jù)源名稱就必須帶有java:/前綴,數(shù)據(jù)源名稱大小寫敏感。properties
:節(jié)點(diǎn)用作指定持久化產(chǎn)品的各項(xiàng)屬性。
對于properties 節(jié)點(diǎn)需要說明的是,各個(gè)應(yīng)用服務(wù)器使用的持久化產(chǎn)品都不一樣,如jboss使用的是hibernate,weblogic10使用的是kodo。因?yàn)閖boss采用了hibernate,hibernate有一項(xiàng)屬性"hibernate.hbm2ddl.auto",該屬性指定實(shí)體Bean發(fā)布時(shí)是否同步數(shù)據(jù)庫結(jié)構(gòu),如果"hibernate.hbm2ddl.auto"的值設(shè)為“create-drop”,在實(shí)體發(fā)布及卸載時(shí)將自動創(chuàng)建及刪除相應(yīng)數(shù)據(jù)庫表。
jboss服務(wù)器啟動或關(guān)閉時(shí)也會引發(fā)實(shí)體Bean的發(fā)布及卸載。
ps:如果你的表已經(jīng)存在,并且想保留數(shù)據(jù),發(fā)布實(shí)體 bean 時(shí)可以把 hibernate.hbm2ddl.auto 的值設(shè)為 none 或update,以后為了實(shí)體 bean 的改動能反應(yīng)到數(shù)據(jù)表,建議使用 update,這樣實(shí)體 Bean 添加一個(gè)屬性時(shí)能同時(shí)在數(shù)據(jù)表增加相應(yīng)字段。
擴(kuò)展(persistence-unit)
持久化單元包含的屬性有:
- 在該持久化單元范圍(作用域)內(nèi)的實(shí)體類
- 為實(shí)體類提供持久化的持久化提供者(Persistence Provider)或庫
- 實(shí)體類的數(shù)據(jù)源(Data Source)
- 應(yīng)用使用的事務(wù)類型(Transaction Type)
持久化單元能夠被打包成WAR文件,EJB-JAR文件,EAR文件的一部分,或者直接打包成應(yīng)用程序能夠直接使用的JAR文件。
持久化單元的范圍(作用域)取決于persistence.xml文件的位置。一般說來,IDE能夠使用引導(dǎo)界面來正確放置persistence.xml的位置。例如使用IDE為EJB模塊(Module)創(chuàng)建的持久性單元,persistence.xml文件將被放在EJB模塊的src/conf目錄中,當(dāng)你將模塊打包時(shí),persistence.xml文件被放在EJB JAR文件的META-INF目錄中。這樣持久化單元的作用域就是EJB JAR文件中的類。
ps:persistence.xml文件的位置決定持久化的根(Persistence Root)。持久化的根為JAR文件或者包含META-INF目錄(前提是persistence.xml位于此)的目錄。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用完整示例
這篇文章主要介紹了Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用,結(jié)合完整實(shí)例形式分析了java消息摘要算法MAC的概念、原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09SpringBoot2.x 整合 AntiSamy防御XSS攻擊的簡單總結(jié)
本文主要對SpringBoot2.x集成AntiSamy防御XSS攻擊進(jìn)行簡單總結(jié),其中SpringBoot使用的2.4.5版本,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08java以json格式向后臺服務(wù)器接口發(fā)送請求的實(shí)例
下面小編就為大家分享一篇java以json格式向后臺服務(wù)器接口發(fā)送請求的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫連接池
這篇文章主要介紹了基于java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫連接池,Java通過使用mongo-2.7.3.jar包實(shí)現(xiàn)mongodb連接池,感興趣的小伙伴們可以參考一下2015-12-12IDEA java出現(xiàn)無效的源發(fā)行版14解決方案
這篇文章主要介紹了IDEA java出現(xiàn)無效的源發(fā)行版14解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11java如何實(shí)現(xiàn)自動生成數(shù)據(jù)庫設(shè)計(jì)文檔
以前我們還需要手寫數(shù)據(jù)庫設(shè)計(jì)文檔、現(xiàn)在可以通過引入screw核心包來實(shí)現(xiàn)Java?數(shù)據(jù)庫文檔一鍵生成。本文將具體介紹一下如何通過java自動生成數(shù)據(jù)庫設(shè)計(jì)文檔,需要的朋友可以參考下2021-11-11使用spring容器在初始化Bean時(shí)前和后的操作
這篇文章主要介紹了使用spring容器在初始化Bean時(shí)前和后的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java實(shí)現(xiàn)的Windows資源管理器實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的Windows資源管理器,實(shí)例分析了基于java實(shí)現(xiàn)windows資源管理器的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07