adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列

adf 自动输稿器

大家好。 继续进行ADF + MySQL解决方法系列,今天我们将看到需要做些什么才能将MySQL PK自动增量列与ADF实体PK属性一起使用。 如果使用的是Oracle数据库,则可以使用oracle.jbo.domain.DBSequence以及序列和触发器来立即进行操作。

为简单起见,我们将修改与Entity关联的Java文件,但作为一种好的做法,您应该拥有自己的oracle.jbo.server.EntityImpl类实现并配置JDeveloper,以便它对每个新的版本都使用自己的实现应用程序中的实体。 有关更多信息,请查看此帖子 。

这不是有关如何从表中创建ADF BC的分步教程,我们假设您已经具有业务组件定义。

你需要什么

  • JDeveloper 12c
  • MySQL 5.5以上
  • 为ADF开发配置MySQL

这是本文中将要使用的数据库表:

CREATE  TABLE `test`.`Actor` (`id_actor` INT NOT NULL AUTO_INCREMENT ,`name` VARCHAR(100) NOT NULL ,PRIMARY KEY (`id_actor`) );

从表创建实体后,JDeveloper会将您的Entity属性映射到表列,并根据列的类型设置一些属性。 例如,对于我们的PK列(id_actor),JDeveloper会将属性设置为强制性 Integer并且始终可更新。 我们需要进行更改,因为我们希望我们的PK 在新的 (创建新实例时)是可更新的, 不是强制性的 (因为我们在发布到数据库后正在读取autoincrement值):

ADFMySQL_EntityAtt_1

您的数据库中可能有几个表,因此您的ADF应用程序中有多个实体,但是并非所有表都可能具有自动增量PK列,因此我们需要一种方法来标记或标识实体的PK属性何时来自数据库中的自动增量列。 我们将使用Property Set来做到这一点,它允许我们定义键/值属性的集合,然后我们可以将这些属性关联到属性并在运行时访问它们:

  1. 在JDeveloper中,选择: 文件–>新建–>从库…
  2. ADF业务组件中,选择“ 属性集” PropertySet_1
  3. 设置新属性集的名称和包:
    PropertySet_2
  4. 创建后,我们可以定义键/值属性集,如果要向用户显示这些属性,我们甚至可以以可翻译模式定义它们。 这不是我们的情况,因此我们将定义一个不可翻译的属性:
    PropertySet_3
  5. 将属性名称设置为AI (对于AutoIncrement),并将其值设置为true (因为使用此属性集的属性来自自动增量列):
    PropertySet_4
  6. 现在我们已经准备好属性集,可以在Entity PK属性中使用它:
    PropertySet_5

为了检索PK属性的autoincrement值,我们需要覆盖Entity类的默认实现(请记住,为简单起见,请执行此操作,但您可以按照本文开头的介绍做得更好)。 我们可以通过为Entity实现Java类,然后重写EntityImpl.doDML(int,TransactionEvent)方法(将更改发布到数据库的方法来实现:

  1. 转到实体的Java部分,然后单击铅笔图标:

    Java_1

  2. 在弹出窗口中,选择Generate Entity Object Class: ...,然后单击OK:
    Java_2
  3. 现在,Entity类的Java部分显示Java文件,单击指向Java File名称的链接:
    Java_3
  4. JDeveloper将打开一个包含Java代码的新窗口。 复制并粘贴以下方法:
    ...@Overrideprotected void doDML(int i, TransactionEvent transactionEvent) {//got to call first to super, so the record is posted //and we can then ask for the last insert idsuper.doDML(i, transactionEvent);//after the record is inserted, we can ask for the last insert idif (i == DML_INSERT) {populateAutoincrementAtt();}}/** Determines if the Entity PK is marked as an autoincrement col* and executes a MySQL function to retrieve the last insert id*/private void populateAutoincrementAtt() {EntityDefImpl entdef = this.getEntityDef();AttributeDef pk = null;//look for primary key with Autoincrement property setfor (AttributeDef att : entdef.getAttributeDefs()) {if (att.isPrimaryKey() && (att.getProperty("AI") != null && new Boolean(att.getProperty("AI").toString()))) {pk = att;break;}}if (pk != null) {try (PreparedStatement stmt = this.getDBTransaction().createPreparedStatement("SELECT last_insert_id()", 1)) {stmt.execute();try (ResultSet rs = stmt.getResultSet()) {if (rs.next()) {setAttribute(pk.getName(), rs.getInt(1));}}} catch (SQLException e) {e.printStackTrace();}}}
    ...

    上面的代码将更改发布到数据库,然后询问我们是否要插入值。 如果是这种情况,我们需要检索自动增量值并将其设置在我们的PK属性中。 有关获取自动增量值的更多信息,请参考MySQL函数LAST_INSERT_ID() 。

好的,让我们尝试一下我们的解决方案。 首先,运行您的应用程序模块:

RunAppModule_1

出现Oracle ADF Model Tester工具后,在左侧面板上选择(双击) ActorView1视图对象,然后在右侧面板上单击绿色的加号图标,以添加新的Actor:

RunAppModule_2

输入Actor的名称,然后按“将更改保存到数据库”按钮(工具栏上带有清单图标的小数据库):

RunAppModule_4

您会注意到,自动增量值现已设置为
idActor属性!

无需担心并发插入,MySQL文档指出可以(请查看此文档 ):

同时使用多个客户端的LAST_INSERT_ID()和AUTO_INCREMENT列是完全有效的。 每个客户端将收到该客户端执行的最后一条语句的最后插入的ID。

  • 下载本文中使用的ADF项目 。

拜拜!

参考:来自Java和ME博客的JCG合作伙伴 Alexis Lopez 在ADF实体PK属性中使用MySQL自动增量PK列 。

翻译自: https://www.javacodegeeks.com/2013/11/using-mysql-autoincrement-pk-column-in-adf-entity-pk-attribute.html

adf 自动输稿器

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

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

相关文章

探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

最近引起我注意的一个有趣且充满希望的开源项目是Spline ,它是由Absa维护的Apache Spark的数据沿袭跟踪和可视化工具。 该项目由两部分组成:一个在驱动程序上工作的Scala库,该驱动程序通过分析Spark执行计划来捕获数据沿袭,并提供…

高性能mysql 聚簇索引,高性能MySQL笔记-第5章Indexing for High Performance-005聚集索引...

一、聚集索引介绍1.什么是聚集索引?InnoDB’s clustered indexes actually store a B-Tree index and the rows together in the same structure.2.为什么一张表只能一个聚集索引?When a table has a clustered index, its rows are actually stored in …

PHP应用GD2函数填充几何图形,使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)...

使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)本篇主要讲解使用GD2函数实现几何图形的绘制,首先我们需要的事创建一个图像,在之前的文章中我们就说过了,创建图像是所有图像操作的第一步,然后再背景上根据坐标点绘制图形轮…

API测试和自动化101:基本指南

API代表A pplication P AGC软件我覆盖整个院落。 通常,API用于通过使用任何通信方式来促进两个不同应用程序之间的交互。 在网络上使用API​​时,我们将其称为“ Web服务”。 最近,API已成为编程的Struts。 与在应用程序中一样,编…

oracle数据库安装HotSpot,安装Oracle数据库软件遭遇诡异的HotSpot Virtual Machine Error : 11报错...

虽然也装了很多次的数据库了,可是偶尔还是会碰见一些很无语的错误,前两天在RHEL5.0上安装Oracle 10g 10.2.0.1,起图形后点击下虽然也装了很多次的数据库了,可是偶尔还是会碰见一些很无语的错误,前两天在RHEL5.0上安装O…

linux结束所有任务命令行,Linux基础命令(15)定时任务

释放双眼,带上耳机,听听看~!crontadLinux定时任务Crontab命令详解linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设…

如何修复无效的目标版本:Maven Build中的1.7、1.8、1.9或1.10错误

如果您正在使用Maven构建Java项目,可能是在Eclipse中,或者是通过运行mvn install在命令提示符下构建的,并且构建失败并显示诸如“无效的目标发行版:1.7”或“无效的目标发行版:1.8”之类的错误,那么您来了到…

Linux查看时间段文件,Linux查看特定时间段内修改过的文件

一.Linux系统日志的一些信息,日志配置文件syslog.conf系统日志一般都存在/var/log下常用的系统日志如下:核心启动日志:/var/log/dmesg系统报错日志:/var/log/messages邮件系统日志:/var/log/maillogFTP系统日志:/var/log/xferlog安全信息和系统登录与网络连接的信息…

使用ClickHouse UDF与OpenAI模型集成

本文字数:14683;估计阅读时间:37 分钟 作者:Dale McDiarmid 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shenzhen User Group第1届 Meetup 火热报名中&#x…

使用Spring Boot和Vue.js构建一个简单的CRUD应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 在本教程中,您将使用Vue.js作为客户端并将Spring Boot作为资源服务器来构…

linux安装 icc编译器,安装 Intel Compiler (ifort icc icpc)

在下载目录下解压heqinheqin-dell:~/Downloads$ tar zxvf parallel_studio_xe_2017_update7.tgz进入解压后的文件夹heqinheqin-dell:~/Downloads$ cd parallel_studio_xe_2017_update7/为了记录过程而不用截图,我选择用命令行安装,当然你也可以用install…

linux 安装mongodb 64,在CentOS 6.x 64bit上安装MongoDB 3.2社区版

基本安装步骤参考: https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/1) 创建repo源文件:sudo vim /etc/yum.repos.d/mongodb-org-3.2.repo内容如下:[mongodb-org-3.2]nameMongoDB Repositorybaseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mon…

[免费网络研讨会] Java 11的第一印象

一年多以前,我们正焦急地等待新的模块化Java 9的到来。大约在同一时间,引入了一个新的发布周期,该周期将每6个月发布一次新版本,并提供长期支持(LTS)。每3年发行一次(或每6个版本发行一次&#…

linux可以http安装么,Linux 5下 http的安装

Web网站服务(一)http.conf中的全局配置ServerRoot:用于设置httpd服务的根目录,该目录中包括运行Web站点必须的目录和文件。默认根目录为:/usr/local/apache2Listen:用于设置Apache服务器监听的网络端口号,默认为80User…

APIGEE – API网关简介

在本文中,我想简要介绍一下APIGEE。 APIGEE主要提供现成的以下功能作为api网关。 协议转换 与任何协议进行转换,包括SOAP,REST,XML二进制或自定义 交通管理 开箱即用的灵活,分布式配额管理,速率限制和峰…

内存泄漏分析_调查内存泄漏第2部分–分析问题

内存泄漏分析这个小型系列的第一个博客介绍了如何创建一个非常泄漏的示例应用程序,以便我们可以研究解决服务器应用程序上基于堆的问题的技术。 它展示了Producer-Consumer模式的一个大问题,即消费者代码必须能够至少与生产者一样快(甚至不是…

将Java Flight Recorder与OpenJDK 11结合使用

Java Flight Recorder(JFR)曾经是Oracle JDK的商业附加组件。 由于它是与Java Mission Control一起最近开源的,因此使用OpenJDK 11的每个人现在都可以使用此出色的工具免费对Java应用程序进行故障排除。 JFR以前是专有解决方案,对…

c语言开发工具程序代码是什么文件,【C语言】开发工具--GCC使用入门

来自: 51CTO GCC使用入门通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编…

无服务器安全性:将其置于自动驾驶仪上

Ack :本文是从个人经验以及从无服务器安全性的其他多个来源学到的东西的混合。 我无法在这里列出或确认所有这些信息; 但是,应该特别感谢The Register , Hacker Noon , PureSec以及Serverless Status和Serverless&…

c语言构造报文,构造一个缓冲区溢出的C语言的例子

满意答案wk05122013.06.01采纳率:45% 等级:12已帮助:15719人#include #include #include void function(char *str){char buffer[16];strcpy(buffer, str);}void evilfunc(){printf("Am I Evil?\n");}int main(int argc, char*…