2014-06-12 Created By BaoXinjian

一、摘要


1. 在Update数据之前,我们往往要对待更新的记录进行有效性的校验,校验级别包括

  • Attribute Level Validation: 字段级的校验
  • Entity Level Validation: 记录级的校验

2. 字段级校验-只涉及单个字段的校验

字段级别的校验一般情况下写在EO的set<Attribute name>()方法中,

根据传入的value来决定是执行setAttributeInternal() 还是throw Exception.(代码应写在setAttributeInternal()之前)

例如如果一个订单的状态为CLOSE, 则不允许更改OrderPrice. 伪码如下:

Public void   validateEntity()

{

super.validateEntity();

String status = getOrderStatus();

If (“CLOSE”.equals(status))

{

Number ldorderprice = (Number)getPostedAttribute(ORDERPRICE);

Number neworderprice = (Number)getOrderPrice();

If (oldorderprice.compareto(neworderprice)!=0)

{

throw new Exception(“Error: Order Price can not be edited!”);

}

}

}

3. 记录级校验-只涉及多个字段组合的校验

当校验涉及多个Attribute时,你就不能使用字段级的校验了,需使用记录级的校验,即Entity Level Validation. 此校验在validateEntity()方法中实现.

校验代码须写在   super.validateEntity() 之后

例如如果一个订单的状态为CLOSE, 则不允许更改OrderPrice. 伪码如下:

Public void   validateEntity()

{

super.validateEntity();

String status = getOrderStatus();

If (“CLOSE”.equals(status))

{

Number ldorderprice = (Number)getPostedAttribute(ORDERPRICE);

Number neworderprice = (Number)getOrderPrice();

If (oldorderprice.compareto(neworderprice)!=0)

{

throw new Exception(“Error: Order Price can not be edited!”);

}

}

}

二、字段级校验案例


案例. 在EO的字段添加异常,如果Total为0值,则抛出异常

1. 字段级验证异常调用

2. 字段级验证异常测试

三、记录级校验案例


案例. 在EO的记录级validateEntity()添加异常,将多个字段组合进行判断,则抛出异常

1. 记录级验证异常调用

2. 记录级验证异常调用测试

四、异常触发后如何对transaction进行rollback


不要试图在EO的Validation 里执行rollback() 方法或clearcache() 方法. 当出现校验失败时,有下面两种做法:

Bad Method:

  • 在EO Module

public void validateEntity(){

….

transaction.rollback()

throw new OAException….

}

Right Method:

  • In EO Module

public void validateEntity(){

throw new OAException…

}

  • In AM Module

Try

{  transaction.commit();

}Catch ( OAException ex)

{transaction.rollback();}

Thanks and Regards

参考:Tony Liu - http://blog.itpub.net/10359218/viewspace-677447/

转载于:https://www.cnblogs.com/eastsea/p/3784741.html

OAF_EO系列2 - Validation数据校验验证机制(概念)相关推荐

  1. Silverlight实例教程 - Validation数据验证开篇

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  2. 清华大数据系列讲座——大数据发展与区块链应用成功举办

    2018年9月15日,由清华-青岛大数据工程研究中心主办的"清华大数据系列讲座-大数据发展与区块链应用"在中国海洋大学成功举办.本此讲座邀请到了清华-青岛数据科学研究院执行副院长韩 ...

  3. 每个软件工程师都应该知道的有关实时数据的统一概念

    转自:炼数成金 每个软件工程师都应该知道的有关实时数据的统一概念 我在六年前的一个令人兴奋的时刻加入到LinkedIn公司.从那个时候开始我们就破解单一的.集中式数据库的限制,并且启动到特殊的分布式系 ...

  4. linux 读取大量图片 内存,10 张图帮你搞定 TensorFlow 数据读取机制

    导读 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解 ...

  5. 一起谈.NET技术,.Net Discovery系列之-深入理解平台机制与性能影响 (中)

    上一篇文章中Aicken为大家介绍了.Net平台的垃圾回收机制与其对性能的影响,这一篇中将继续为大家介绍.Net平台的另一批黑马-JIT.有关JIT的机制分析 ● 机制分析以C#为例,在C#代码运行前 ...

  6. .NET 并行(多核)编程系列之七 共享数据问题和解决概述

    .NET 并行(多核)编程系列之七 共享数据问题和解决概述 原文:.NET 并行(多核)编程系列之七 共享数据问题和解决概述 .NET 并行(多核)编程系列之七 共享数据问题和解决概述 前言:之前的文 ...

  7. tensorflow 1.0 学习:十图详解tensorflow数据读取机制

    本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...

  8. 理解DataSet的数据缓存机制

    虽然在以前的开发中经常使用DataSet类,但是重来没有涉及到数据缓存机制这块内容.今天看了一下,也算是做点总结. 在理解数据缓存机制之前需要理解DataRow的两个概念,即行状态和行版本.行状态就是 ...

  9. 十图详解TensorFlow数据读取机制(附代码)

    在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...

最新文章

  1. ASimpleCache 轻量级缓存
  2. windows7下消除快捷键箭头的方法
  3. Unity3D获取Andorid设备返回键,主页键等功能
  4. 王小川:与龚宇相识14年 爱奇艺造假不可能
  5. 在dom最前面插入_前端性能优化之dom编程
  6. window.location.href = basePath + paper/deleteExpertComment.action?expertId=+$(this).prev().val();
  7. boot spring 跨域注解_每日一问学技术:@SpringBootApplication注解干了个啥?
  8. C++ for (auto it:myset) 是什么意思 引用
  9. 一种简单的睡眠评分规则
  10. python实战因子分析和主成分分析
  11. 如何直接通过电脑查看路由器密码
  12. html如何制作扑克,用css制作扑克牌
  13. Qt模仿网易云黑胶片转动动画
  14. matlab蒙特卡罗变量变换的分布,使用 copula 仿真相关随机变量
  15. SVN+Gitee配置版本控制库
  16. 万维考试系统题库答案python_万维题库与试卷管理系统
  17. Python之生成器详解
  18. 跨界也伟大:当D.E.Shaw进军医疗领域
  19. C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)
  20. Vegas的安装激活教程

热门文章

  1. 用Alpha生成Trimp图的方法(python)
  2. UVa1374 Power Calculus(IDDFS)
  3. Dockerfile命令
  4. 数据科学的完整学习路径—Python版
  5. 网络编程学习笔记(TCP套接口选项)
  6. CF1041C Coffee Break
  7. VUE+WebPack游戏开发:神庙逃亡的游戏设计
  8. NameNode中几个关键的数据结构
  9. 配置 linux-bridge mechanism driver - 每天5分钟玩转 OpenStack(77)
  10. [模仿微软Live.cn]JavaScript输入邮箱自动提示