JPA数据库架构生成

一段时间以来, JPA的大多数主要实现,例如Hibernate , EclipseLink或OpenJPA ,都提供了生成数据库模式对象的方法。 这些包括表,主键,外键,索引和其他对象的生成。 不幸的是,当处理多个环境时,这些不是实现之间的标准。 仅在最新的JPA 2.1规范中,才引入了Schema Generation标准化。

从现在开始,如果您使用的是Java EE 7 ,则不必担心提供程序之间的差异。 只需使用新的标准属性即可。 当然,您可能会认为根本不需要这些,因为不应像这样管理环境的数据库架构。 尽管如此,这些对于开发或测试目的还是非常有用的。

模式生成

特性:

如果希望对模式生成使用新的标准,只需将以下任何属性添加到persistence.xml properties部分:

属性 价值观
javax.persistence.schema-generation.database.action

指定对数据库架构要采取的措施。 可能的值不言自明。 如果此属性不是特定的,则不会在数据库中执行任何操作。

无,创建,拖放,创建,删除
javax.persistence.schema-generation.create-source

指定应如何创建数据库模式。 可以仅通过使用在应用程序实体中指定的注释元数据,通过执行SQL脚本或两者的组合来实现。 您还可以定义顺序。 无需指定此属性即可生成架构。 默认值为元数据 。 如果结合使用create动作,则需要小心。 结果操作可能会在数据库架构中生成意外行为并导致失败。

元数据,脚本,元数据高于脚本,脚本然后元数据
javax.persistence.schema-generation.drop-source

javax.persistence.schema-generation.create-source相同 ,但用于放置动作。

元数据,脚本,元数据高于脚本,脚本然后元数据
javax.persistence.schema-generation.create-script-source,javax.persistence.schema-generation.drop-script-source

指定要在创建或删除数据库模式时执行的SQL脚本文件的目标位置。

要执行的文件URL的字符串
javax.persistence.sql-load-script-source

指定SQL文件的目标位置,以将数据加载到数据库中。

要执行的文件URL的字符串


此外,还可以使用“模式生成”操作来生成SQL脚本:

属性 价值观
javax.persistence.schema-generation.scripts.action

指定应生成的SQL脚本。 仅当指定了相应的生成位置目标时,才生成脚本。

无,创建,拖放,创建,删除
javax.persistence.schema-generation.scripts.create-target,javax.persistence.schema-generation.scripts.drop-target

指定生成SQL脚本文件以创建或删除数据库模式的目标位置。

要执行的文件URL的字符串

样品

以下示例删除并创建JPA应用程序所需的数据库模式对象。 依赖于实体的注释元数据,还执行一个名为load.sql的任意SQL文件。

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"><persistence-unit name="MyPU" transaction-type="JTA"><properties><property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/><property name="javax.persistence.schema-generation.create-source" value="metadata"/> <property name="javax.persistence.schema-generation.drop-source" value="metadata"/> <property name="javax.persistence.sql-load-script-source" value="META-INF/load.sql"/> </properties></persistence-unit>
</persistence>

另一个示例将生成要创建的数据库架构对象,并将其放置在目标位置:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistenceversion="2.1"xmlns="http://xmlns.jcp.org/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"><persistence-unit name="MyPU" transaction-type="JTA"><properties><property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/><property name="javax.persistence.schema-generation.scripts.create-target" value="file:/tmp/create.sql"/><property name="javax.persistence.schema-generation.scripts.drop-target" value="file:/tmp/drop.sql"/></properties></persistence-unit>
</persistence>

这两个示例也可以组合在一起以删除和创建数据库对象,并生成执行这些操作的相应脚本。 您可以在Github上托管的Java EE Samples项目中找到这些示例和其他示例。

局限性

如前所述,建议您仅将这些属性用于开发或测试目的。 错误的设置可能会轻易破坏或破坏您的生产数据库。

没有更新或验证架构的操作。 我找不到他们未将其纳入规范的原因,但这是改进建议的问题 。

数据库模式操作仅在Java EE环境中的应用程序部署上执行。 为了进行开发,您可能希望在服务器重启时执行操作。

支持

与Wildfly和Glassfish捆绑在一起的Hibernate和EclipseLink都支持这些属性。

OpenJPA当前不支持这些属性,但是我一直在为标准Schema Generation提供OpenJPA支持。 如果您好奇或想了解进度,请在此处查看我的Github存储库。 实际上,这是我写这篇文章的主要动机,因为我参与了该功能的实现。

希望您喜欢这个职位:)

翻译自: https://www.javacodegeeks.com/2015/03/jpa-database-schema-generation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

近期项目中可能要用到Flash存取数据&#xff0c;并与JS互调&#xff0c;所以就看了一下ActionScript 3.0&#xff0c;现把学习结果分享一下&#xff0c;希望对新手有帮助。 目录 ActionScript 3.0简介 Hello World 文件读写 数据存储(SharedObject) 与JS互调 ActionScript 3.0简…

阿里云服务器mysql默认密码_阿里云服务器修改MySQL初始密码---Linux学习笔记

主要方法就是修改 MySQL按照文件下面的my.cnf文件首先是找到my.cnf文件&#xff0c;# find / -name “my.cnf”# cd /etc接下来最好是先备份my.cnf文件&#xff0c;对于初手而言#/etc vi my.cnf之后找到[mysqld]的段&#xff0c;在那段中插入一行&#xff1a;skip-grant-tables…

Quasar和Akka –比较

actor模型是用于容错和高度可扩展系统的设计模式。 角色是独立的工作程序模块&#xff0c;仅通过消息传递与其他角色进行通信&#xff0c;可以与其他角色隔离而失败&#xff0c;但是可以监视其他角色的故障并在发生这种情况时采取一些恢复措施。 参与者是简单&#xff0c;孤立但…

dlgdata.cpp错误提示 解决方案

1、在测试编写继承CStatic类组件时候&#xff0c;发现在调用调试过程中弹出一个错误&#xff0c;点忽略还可以继续运行。如下图&#xff1a; 2、dlgdata.cpp此文件是VS安装目录\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc中的文件&#xff0c;而出现此错误一般是所…

mysql主从复制时间配置_MySQL主从复制配置

环境CentOS 7.5Docker 1.13.1MySQL 8.0.16基于以上环境启动三个mysql容器&#xff0c;一个为master&#xff0c;二个为slavemaster和slave使用的mysql版本是完全一致的&#xff0c;未测试不同版本的mysql配置master编辑配置文件编辑master的配置文件my.cnf$ vim /usr/mysql/con…

告别异步代码

Quasar是一个向JVM添加真正的轻量级线程&#xff08;纤维&#xff09;的库。 它们非常便宜且非常快-实际上&#xff0c;光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码&#xff0c;同时享受与复杂异步代码相同的性能优势。 在本文中&#xff0c;我们将学…

如何利用多核CPU来加速你的Linux命令

如何利用多核CPU来加速你的Linux命令 原文出处&#xff1a; rankfocus 译文出处&#xff1a; 外刊IT评论 你是否曾经有过要计算一个非常大的数据(几百GB)的需求&#xff1f;或在里面搜索&#xff0c;或其它操作——一些无法并行的操作。数据专家们&#xff0c;我是在对你们说…

魔术二传手反模式

设置者和获取者是邪恶的。 创建JavaBean定义时&#xff0c;这似乎是个好主意。 但是它们对Java社区造成了很大的伤害。 通常不如null指针那么多&#xff0c;但足够了。 首先&#xff0c;许多初级人员认为实现setter和getter&#xff08;嘿&#xff0c;在Eclispe中只需单击几下…

sqlwarning mysql_mysql提示[Warning] Invalid (old?) table or database name问题的解决方法

DROP TABLE IF EXISTS [TEMP_TABLE_NAME];create temporary table [TEMP_TABLE_NAME] select col1,col2,... from [TABLE_NAME];alter table [TEMP_TABLE_NAME] add unique idx_col1(col1);经过以上操作中&#xff0c;多次出现该warning问题。通过查询和跟踪调试源码&#xff0…

C语言操作符优先级

转自&#xff1a;http://www.cnblogs.com/xiehy/archive/2010/02/04/1663825.html 优先级 运算符 含 义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运算符 1 (单目运算符)…

linux mysql select_MySQL-Select语句高级应用

阅读目录1.1 SELECT高级应用1.2 select中where子句使用1.3 select中ORDER BY子句1.4 LIMIT子句1.5 多表连接查询1.6 Informatica_schema获取元数据1.7 参考文献1.1 SELECT高级应用1.1.1 前期准备工作本次测试使用的是world数据库&#xff0c;由MySQL官方提供下载地址&#xff1…

为AWT的机器人创建DSL

Java SDK附带了java.awt.Robot类&#xff0c;该类允许键盘和鼠标输入的自动化以及屏幕捕获的创建。 如果您想编写一个模拟用户输入的小型测试应用程序&#xff0c;或者只想自动化一些重复文本的输入&#xff0c;则此功能非常有用。 但是您不想每次都编写一个完整的Java应用程序…

Win7下硬盘安装Redhat双系统

Win7下硬盘安装Redhat Linux 形成双系统过程详解 需要软件 EasyBCD2.0 和 linux ISO 系统镜像 RedHat linux下载地址&#xff1a;http://www.linuxidc.com/Linux/2013-01/78017.htm 安装前准备工作: 1 一个 Windows 盘 D E F 任选其一都可以&#xff0c;将其格式化为FAT32 格式…

java rmi漏洞工具_学生会私房菜【20200924】Weblogic WLS核心组件反序列化命令执行突破(CVE20182628)漏洞复现...

学生会私房菜学生会私房菜是通过学生会信箱收集同学们的来稿&#xff0c;挑选其中的优质文档&#xff0c;不定期进行文档推送的主题。本期文档内容为&#xff1a;Weblogic WLS核心组件反序列化命令执行突破(CVE-2018-2628)漏洞复现》作者介绍&#xff1a;ChowChow&#xff0c;一…

Java泛型中的多态

从作为Java程序员的早期开始&#xff0c;我们都知道如何实例化和使用Collection对象。 实例化为具体类的List接口将如下所示。 List myArrayList new ArrayList();如果myArrayList应该仅保存Integer对象&#xff0c;则从Java 5编译器开始&#xff0c;按照Java Generics规范…

ASP.NET伪静态-无法读取配置文件,因为它超过了最大文件大小的解决办法

一直都在使用微软URLRewriter&#xff0c;具体的使用方法我就不多说了&#xff0c;网上文章很多。 但最近遇到一个问题&#xff0c;就是当web.config文件里面设置伪静态规则过多&#xff0c;大于2M的时候&#xff0c;就报错&#xff1a;无法读取配置文件&#xff0c;因为它超过…

java定义list_我的Java Web之路59 - Java中的泛型

本系列文章旨在记录和总结自己在Java Web开发之路上的知识点、经验、问题和思考&#xff0c;希望能帮助更多(Java)码农和想成为(Java)码农的人。目录介绍再谈Java中的类型为什么需要泛型&#xff1f;Java中的泛型泛型类型泛型方法总结介绍还记得我在这篇文章(我的Java Web之路3…

Spring查找方法示例

当一个bean依赖于另一个bean时&#xff0c;我们使用setter属性或通过构造函数注入bean。 getter方法将向我们返回已设置的引用&#xff0c;但是假设您每次调用getter方法时都想要一个依赖bean的新实例&#xff0c;那么您可能将不得不采用另一种方法。 在本文中&#xff0c;我…

mysql判断数字的函数_Mysql必读MySql判断汉字、日期、数字的具体函数

《Mysql必读MySql判断汉字、日期、数字的具体函数》要点&#xff1a;本文介绍了Mysql必读MySql判断汉字、日期、数字的具体函数&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。MYSQL学习几个平常用的mysql函数,MySql判断汉字、日期、数字的具体函数分享给大家…

编码:可视化位图

在过去的一个月左右的时间里&#xff0c;我每天花费一些时间来阅读Neo4j代码库的新部分&#xff0c;以使其更加熟悉&#xff0c;而我最喜欢的类之一是Bits类&#xff0c;该类可以完成所有底层工作&#xff0c;并且到磁盘。 特别是&#xff0c;我喜欢它的toString方法&#xff…