解决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"的值设为&ldquo;create-drop&rdquo;,在实体发布及卸载时将自动创建及删除相应数据库表。

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

标签:persistence,配置文件,存放路径
0
投稿

猜你喜欢

  • java编程题之顺时针打印矩阵

    2022-02-22 04:05:36
  • C#中DateTime的时间加减法操作小结

    2022-05-31 23:32:25
  • C#/VB.NET实现PPT或PPTX转换为图像功能

    2023-01-25 05:14:37
  • 如何自动生成Mybatis的Mapper文件详解

    2023-07-28 08:20:54
  • 基于Mybatis映射的一点心得(分享)

    2023-08-08 13:15:53
  • 如何通过指针突破C++类的访问权限

    2022-01-26 14:14:58
  • C#创建一个Word并打开的方法

    2022-08-04 23:33:13
  • Jetpack Compose 的新型架构 MVI使用详解

    2023-01-24 14:53:26
  • Android实现图像切换器

    2023-11-27 00:45:41
  • Java创建型设计模式之建造者模式详解

    2023-10-09 17:25:13
  • 聊聊关于Java方法重写的反思

    2022-10-26 00:36:12
  • SpringCloud断路器Hystrix原理及用法解析

    2022-03-20 16:47:41
  • Android Internet应用实现获取天气预报的示例代码

    2023-09-26 04:13:22
  • HashMap原理及手写实现部分区块链特征

    2023-10-15 03:27:27
  • Android实现网络多线程断点续传下载功能

    2021-05-29 18:22:24
  • java使用jdbc操作数据库示例分享

    2023-10-29 13:54:21
  • Android 6.0指纹识别App开发案例

    2021-06-05 10:30:07
  • Java将对象保存到文件中/从文件中读取对象的方法

    2022-06-18 21:26:42
  • 深入探讨Java多线程中的volatile变量

    2023-08-31 02:32:18
  • 关于dubbo的RPC和RESTful性能及对比

    2023-05-23 02:55:14
  • asp之家 软件编程 m.aspxhome.com