解决persistence.xml配置文件修改存放路径的问题
目录
persistence.xml配置文件修改存放路径
今天整合Spring、struts2和Spring Data JPA的时候遇到以下问题,现记录以供参考。
按以上代码配置实体管理工厂时将会抛出异常,大意就是找不到persistence.xml文件。
因为我的persistence.xml文件是放在与src同级的resource文件夹内的,而默认会去src下META-INF文件夹加载该配置文件。
解决办法有两种
1、第一种:
将persistence.xml文件移至src/META-INF/下,若不存在该文件夹则手动创建;
2、第二种:
org.springframework.orm.jpa.LocalEntityManagerFactoryBean
改为
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
如果要了解实现原理,请自行查看源码。
持久化persistence.xml配置文件
在EJB中,一个实体Bean应用由实体类和persistence.xml文件文件组成。persistence.xml文件在jar文件的META-INF目录下。persistence.xml文件指定实体Bean使用的数据源及Entity Manager对象的默认行为。
我们来看一个最简单的persistence.xml文件,了解一下它的配置。
对于properties 节点需要说明的是,各个应用服务器使用的持久化产品都不一样,如jboss使用的是hibernate,weblogic10使用的是kodo。因为jboss采用了hibernate,hibernate有一项属性"hibernate.hbm2ddl.auto",该属性指定实体Bean发布时是否同步数据库结构,如果"hibernate.hbm2ddl.auto"的值设为“create-drop”,在实体发布及卸载时将自动创建及删除相应数据库表。
jboss服务器启动或关闭时也会引发实体Bean的发布及卸载。
ps:如果你的表已经存在,并且想保留数据,发布实体 bean 时可以把 hibernate.hbm2ddl.auto 的值设为 none 或update,以后为了实体 bean 的改动能反应到数据表,建议使用 update,这样实体 Bean 添加一个属性时能同时在数据表增加相应字段。
扩展(persistence-unit)
持久化单元包含的属性有:
持久化单元能够被打包成WAR文件,EJB-JAR文件,EAR文件的一部分,或者直接打包成应用程序能够直接使用的JAR文件。
持久化单元的范围(作用域)取决于persistence.xml文件的位置。一般说来,IDE能够使用引导界面来正确放置persistence.xml的位置。例如使用IDE为EJB模块(Module)创建的持久性单元,persistence.xml文件将被放在EJB模块的src/conf目录中,当你将模块打包时,persistence.xml文件被放在EJB JAR文件的META-INF目录中。这样持久化单元的作用域就是EJB JAR文件中的类。
ps:persistence.xml文件的位置决定持久化的根(Persistence Root)。持久化的根为JAR文件或者包含META-INF目录(前提是persistence.xml位于此)的目录。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章: