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值):

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

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

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

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

  2. 在弹出窗口中,选择Generate Entity Object Class: ...,然后单击OK:
  3. 现在,Entity类的Java部分显示Java文件,单击指向Java File名称的链接:
  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() 。

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

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

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

您会注意到,自动增量值现已设置为
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 自动输稿器

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

  1. adf4351_在ADF实体PK属性中使用MySQL自动增量PK列

    adf4351 大家好. 继续进行ADF + MySQL解决方法系列,今天我们将看到需要做些什么才能将MySQL PK自动增量列与ADF实体PK属性一起使用. 如果我们使用的是Oracle数据库,则可 ...

  2. 在ADF实体PK属性中使用MySQL自动增量PK列

    大家好. 继续进行ADF + MySQL解决方法系列,今天我们将看到要使用MySQL PK自动增量列和ADF实体PK属性来进行的工作. 如果使用的是Oracle数据库,则可以使用oracle.jbo. ...

  3. adf输稿器是什么_ADF输稿器 多页复印法宝_多功能一体机_办公打印导购-中关村在线...

    从经济的角度出发,选择A4激光多功能一体机的时候留意一下是不是有"输稿器"的配置.从商品图片或介绍中也能看到,只要是多功能打印机上面多了一层放文件的小帽子,就是自动输稿器.不过这个 ...

  4. 欢乐鼠标自动点击器_使用ESP32 DIY蓝牙自动点击器,滑屏器

    前言 因为爱薅羊毛,然后正好最近免费车一趟接一趟,咪咕开完,京东开,京东开完掌阅开,下一个不知道是谁,,,,可我又不是什么很有耐心的人,虽然我喜欢看书,但是如果规定时间,加上页数限制我就很烦,所以我还 ...

  5. 中 自动展示链接的内容_织梦DEDECMS文章内容中的图片自动添加ALT和title属性方法...

    今天下载我资源网(www.xiazaiwo.net)要说的是织梦DEDECMS文章内容中的图片自动添加ALT和title属性,如果觉得不错,请分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 织 ...

  6. thinkphp 框架自动加载原理_这下你应该理解ThinkPHP的Loader自动加载了

    想了很久终于要开始系列文章的编写了,期望是写出提升和面试都可以搞定的系列文章. 当你看到本文时,如果你发现咔咔没有编写到的面试热点问题或者技术难点,期待评论区指出,一起完善. 前言 目前再整理PHP进 ...

  7. layui table 每列加标签_【前端】layui表格中根据条件给对应的列加背景色

    [前端]layui表格中根据条件给对应的列加背景色 [前端]layui表格中根据条件给对应的列加背景色 1.效果(根据条件动态给表格加背景色) 2.代码: 在我自己的项目中,由于条件比较多,提取出了一 ...

  8. 光遇自动弹琴脚本代码_光遇弹琴辅助软件下载-光遇自动弹琴脚本代码下载v1.0_86PS软件园...

    光遇弹琴辅助是一款可以帮助手残党的光遇玩家脱离苦海的神仙辅助软件.不仅操作简单,一键运行,而且特别省心,只需要点击运行然后不用再旁边看着,直接挂机就可以完成基本的任务.当别人都在练习乐谱的时候,你就可 ...

  9. linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国

    众所周知,在 Linux 中一切皆为文件,包括硬盘和显卡等.在 Linux 中导航时,大部分的文件都是普通文件和目录文件.但是也有其他的类型,对应于 5 类不同的作用.因此,理解 Linux 中的文件 ...

最新文章

  1. 数据结构(Java)——查找和排序(1)
  2. 如何在金山毒霸软件里安装腾讯视频
  3. 安全筛选器创建与管理
  4. php orm教程,Laravel ORM 数据model操作教程
  5. 在Ubuntu系统中重置root密码
  6. 在Java下连接SQLite数据库
  7. 开源的长列表渲染库-Clusterize.js
  8. 拓端tecdat|R语言使用二元回归将序数数据建模为多元GLM
  9. c#.net 无法直接启动带有“类库输出类型”的项目
  10. JavaSE JDK搭建
  11. 异速联未获取服务器信息,异速联客户端连接服务器的方法
  12. SONY SVP1322 笔记本电脑升级
  13. Windows与Linux配置jco3
  14. python基础:sys模块
  15. Minimax AI 算法在井字游戏(或 Noughts and Crosses)游戏中的实现
  16. 局域网出现广播风暴怎么办?如何阻止广播风暴?
  17. windows7添加打印机时,提示“本地打印机后台处理程序服务没有运行”
  18. String.Empty和的区别
  19. Python实现文字转语音
  20. SpringMVC-自定义类型转换器

热门文章

  1. 【区间DP】摆渡线路(2017 特长生 T4)
  2. 二次重建基本完成辣!
  3. 深度学习中反向传播算法简单推导笔记
  4. poj3648 Wedding 2-sat
  5. Redis进阶之内存模型
  6. Java架构师必看的10本书
  7. Java 线程同步总结
  8. 人脸注册源码faceregiste
  9. 拦截第三方快递物流 ,console控制台打印正常 ,浏览器显示正常 ,传至后台乱码
  10. python网络模块_Python的pyroute2网络模块-阿里云开发者社区