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/

OAF_EO系列2 - Validation数据校验验证机制(概念)的更多相关文章

  1. Silverlight实例教程 - Validation数据验证DataAnnotation机制和调试技巧(转载)

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

  2. Silverlight实例教程 - Validation数据验证基础属性和事件(转载)

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

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

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

  4. JVM系列文章(四):类载入机制

    作为一个程序猿,只知道怎么用是远远不够的. 起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP ...

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

    原文:.NET 并行(多核)编程系列之七 共享数据问题和解决概述 .NET 并行(多核)编程系列之七 共享数据问题和解决概述 前言:之前的文章介绍了了并行编程的一些基础的知识,从本篇开始,将会讲述并行 ...

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

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

  7. python之路day06--python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码

    python2#print() print'abc'#range() xrange()生成器#raw_input() python3# print('abc')# range()# input() = ...

  8. 9.10 翻译系列:EF数据注解特性之StringLength【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/stringlength-dataannotations-attribute-in-co ...

  9. 十图详解tensorflow数据读取机制

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

随机推荐

  1. Android—进度条

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  2. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  3. Java——交通灯

     /* * 交通灯管理系统的 项目需求: * 模拟实现:  十字路口的交通灯系统逻辑,  具体需求如下: *  异步随机生成按照各个路线行驶的车辆. *  信号灯忽略黄灯.  只考虑红灯和绿灯. ...

  4. lucene 索引合并策略

    在索引算法确定的情况下,最为影响Lucene索引速度有三个参数--IndexWriter中的 MergeFactor, MaxMergeDocs, RAMBufferSizeMB .这些参数无非是控制 ...

  5. Java 实现任意N阶幻方的构造

    一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2 ...

  6. 计算机中丢失 msvcr110.dll 怎么办

    笔者在一次运行 php.exe 时,运到“无法启动此程序,因为计算机中丢失 MSVCR110.dll.尝试重新安装该程序以解决此问题.”的提示,当时很无语,因为系统是刚刚安装好的,而且是最新版本的. ...

  7. MongoDB 入门与实例

    一.准备工作 1. 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.org/displ ...

  8. 你了解System.out.println()的真正含义吗?

    在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 其实System是jav ...

  9. Rsync企业实战之自动异地备份(转)

    认真的测试过网上的大多数文章和版本,真正能一次性测试通过的文章太少了,需要反复的推敲,反复的查阅资料,才能真正的测试成功,所以,在此背景下,总结了Rsync,加上自己的理解分享出来: 1. 原理篇 R ...

  10. Hibernate3回顾-3-Session管理

    3.Session管理 仅为个人理解.请指正 3.1背景 由于Configuration的创建耗费系统的资源.所以有必要只将Configuration实例化一次,之后通过SessionFactory获 ...