ADF sequence

概述

    在Oracle相关应用中,经常使用Sequence作为主键,而在Oracle ADF应用中,应用Sequence自动产生主键也是非常方便的,文本中将介绍两种比较通用的使用方法。

实现

方法一

    编写Java代码,即在Entity Object的实现类中重写create()方法,利用Oracle ADF提供的SequenceImpl帮助类实现Sequence值的生成,而在使用此方法之前需进行简单的设置,标明Entity Object中的哪一字段使用数据库Sequence,及使用的Sequence的名称,具体步骤如下:

1、创建基于HR Schema中Departments表的Entity Object, View Object并将View Object的实例添加到Application Module的Data Model中。

2、双击打开Entity Object,选择为DepartmentId属性添加客户化属性,名为“SequenceName”,其值为将要使用的数据库Sequence的名称。

3、打开Java面板,为该Entity Object生成实现类—DepartmentsImpl,重写其create()方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  /** 
  * Add attribute defaulting logic in this method. 
  * @param attributeList list of attribute names/values to initialize the row 
  */ 
  protected void create(AttributeList attributeList) { 
    super.create(attributeList); 
    for (AttributeDef def : getEntityDef().getAttributeDefs()) { 
    String sequenceName = (String)def.getProperty("SequenceName"); 
    if (sequenceName != null) { 
      SequenceImpl s = new SequenceImpl(sequenceName, getDBTransaction()); 
      setAttribute(def.getIndex(), s.getSequenceNumber()); 
      } 
    } 
   }

4、运行Application Module,使用业务组件浏览器进行测试,当运行Departments在Application Module中的实例,点击create,DepartmentId被自动用Sequence的nextval填充。

 

方法二

    使用Groovy Expression,即在待使用Sequence的属性上设置默认值其Value值,具体步骤如下:

1、创建基于HR Schema中Employees表的Entity Object, View Object并将View Object的实例添加到Application Module的Data Model中。

2、双击打开Entity Object,选择EmployeeId,在Entity Attribute中选择“Value Type”为Expression,并设置“Value”值为:

1
(new oracle.jbo.server.SequenceImpl("employees_seq";,object.getDBTransaction())).getSequenceNumber()

 

 

 

3、运行Application Module,使用业务组件浏览器进行测试,运行Employees在Application Module中的实例,点击create,EmployeeId被自动用Sequence的nextval填充。

 

 

在方法一中创建用户自定义属性时,SequenceName为属性名(为了在用户代码中引用),在vlaues一项中位departments_seq,在后续的代码中似乎没有用的,其实departments_seq 是oracle数据库根据departments表维护的一个sequence序列,用于维护主键的自增长

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值