解决persistence.xml配置文件修改存放路径的问题
作者:时光的诗 发布时间:2023-07-16 09:53:54
persistence.xml配置文件修改存放路径
今天整合Spring、struts2和Spring Data JPA的时候遇到以下问题,现记录以供参考。
<!-- 定义实体管理工厂bean -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="demo" />
<property name="persistenceXmlLocation" value="classpath:persistence.xml" />
</bean>
按以上代码配置实体管理工厂时将会抛出异常,大意就是找不到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文件,了解一下它的配置。
<persistence>
<!-- Name属性用于定义持久化单元的名字 (name必选,空值也合法) -->
<persistence-unit name="foshanshop">
<!-- Jta-data-source 用于指定持久化提供商使用的JTA数据源的全局JNDI名称(可选) -->
<jta-data-source>java:/DefaultMySqlDS</jta-data-source>
<!-- 厂商专有属性(可选) -->
<properties>
<!--自动输出schema创建DDL语句 -->
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
persistence-unit
:节点可以有一个或多个,每个persistence-unit 节点定义了持久化内容名称、使用的数据源以及持久化产品的专有属性。name
:属性定义持久化名称。jta-data-source
:节点指定实体Bean使用的数据源JNDI名称,如果应用发布在jboss下,数据源名称就必须带有java:/前缀,数据源名称大小写敏感。properties
:节点用作指定持久化产品的各项属性。
对于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)
持久化单元包含的属性有:
在该持久化单元范围(作用域)内的实体类
为实体类提供持久化的持久化提供者(Persistence Provider)或库
实体类的数据源(Data Source)
应用使用的事务类型(Transaction Type)
持久化单元能够被打包成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位于此)的目录。
来源:https://blog.csdn.net/chenlong220192/article/details/46534509
猜你喜欢
- 在本次项目中,由于时间紧张直接使用DWR做Ajax请求!要求的是动态展示,那就需要使用DWR轮询请求,但是需要做异常情况下的一些处理!特别是
- 一、前言滚动条一般用于加载进度,我们在看视频的时候或者在浏览网页的时候经常能看到加载进度的页面。在程序开发中,默认的进度加载样式可能跟程序风
- 使用JDBC时,我们都会很自然得使用下列语句:Class.forName("com.mysql.jdbc.Driver"
- 下文我们介绍两种双击事件拦截的方式1.通过Android的事件分发机制进行拦截(dispatchTouchEvent)话不多说,直接上代码:
- 什么是自动装箱,拆箱先抛出定义,Java中基础数据类型与它们的包装类进行运算时,编译器会自动帮我们进行转换,转换过程对程序员是透明的,这就是
- 一.前言在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,
- public void ProcessRequest (HttpContext context) { &n
- 本文实例为大家分享了Android TextView实现跑马灯效果的具体代码,供大家参考,具体内容如下当Layout中只有一个TextVie
- Java处理JSON数据有三个比较流行的类库FastJSON、Gson和Jackson。JacksonJackson是由其社区进行维护,简单
- 1、数组数组的引用传递public class TestDemo1{public static void main(String args[
- Java 中的 CyclicBarrier 是一种同步工具,它可以让多个线程在一个屏障处等待,直到所有线程都到达该屏障处后,才能继续执行。C
- 问题描述Spring Cache提供的@Cacheable注解不支持配置过期时间,还有缓存的自动刷新。我们可以通过配置CacheManneg
- SpringCloud Function 介绍SpringCloud 是一套分布式系统的解决方案,常见的还有阿里巴巴的Dubbo,Fass(
- 网上关于如何切换,其实说的很明确,本文主要通过profile进行快速切换已实现在不同场合下,用不同的打包方式。jar到war修改步骤pom文
- 定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。类型:行为类模式类图:解释器模式是一个比较
- 在实现蓝牙接收时,网上的资料很多,使用起来也很简单,但是我觉得还是有必要把这些知识总结下来。蓝牙开发需要用到一个第三方的库InTheHand
- 一、前期准备1、申请好微信商户号appid,拿到商户id和商户秘钥,退款的话需要商户证书2、申请好支付宝商户号appid,商户公钥和秘钥(需
- 1.介绍我们知道,我们要使一个类型支持foreach循环,就需要这个类型满足下面条件之一:该类型实例如果实现了下列接口中的其中之一:Syst
- List list=new ArrayList()是怎么回事首先明确List是接口,ArrayList是它的实现类以下两种方法都可以,但是不
- 常用事件的分类Java AWT里面的事件可以简单的分为窗体事件(WindowEvent),鼠标事件(MouseEvent),键盘事件(Key