用自定义getter在EL表达式中检测HibernateEntityBean中的ObjectNotFound数据丢失异常
在Hibernate中,Restaurant对象建立many-to-one关联到Street对象,当Street数据被删除时,可以用双向关联设置级联将Restaurant.street设置为null。
如果不是双向关联,则不能设置为null,删除Street时如无做动作,Restaurant表的streetDataId字段不为null,但Street表已没对应数据。
而Restaurant.getStreet()不为null,Restaurant.getStreet().getDataId()仍可操作(只是用Restaurant表的streetDataId字段,不会进行数据库操作),
但Restaurant.getStreet().getStreetName()会出现ObjectNotFound异常,
在.java中可捕捉任何异常进行处理,但当PO不经过转换成VO就传递至jsp时,jsp的EL表达式${restaurant.street.streetName}只能处理null异常,
不能处理ObjectNotFound异常,以致用户见到一堆乱码无法进行任何挽救的操作。如果没特殊处理,EL表达式不能作这样的检测。
有些人会在Restaurant.street的getter里写检测代码或者作更多的处理,比如会new一个非null的Street返回:
public Street getStreet()
{
try
{
if(street==null)
street=new Street();
else
street.getStreetName();//检测Street数据是否能访问。
}
catch(Exception ex)
{
street=new Street();
}
return street;
}
但这种做法是错误的,因为会改变数据库字段getter/setter的通常用法,不可预料和控制。
这时,不妨可以写个另外不和数据库字段关联的不同名字的getter,既不会让代码混乱,又可在需要检测时方便使用:
public boolean getStreetAvailable()
{
boolean available=true;
try
{
street.getArea().getCity();//检测关联的数据是否能访问。
}
catch(Exception ex)
{
available=false;
}
return available;
}
灵活利用getter,让您的程序更健壮。
分享到:
相关推荐
JSTL 使用表达式来简化页面的代码,这对一些标准的方法,例如bean的getter/setter方法,请求参数或者context以及 session中的数据的访问非常方便,但是我们在实际应用中经常需要在页面调用对象的某些方法,例如我...
使用基于正则表达式的模板为C#中的许多属性快速生成Getter Setters
自定义 getter 和 setter 插件。 入门 在包含 Backbone.getters.setters 插件之前在您的页面中包含 Backbone(包括 underscore.js),您就可以开始了。 该插件已使用 Backbone 版本 0.9.1 进行测试 在模型上配置 ...
eclipse 自动为getter和setter添加中文注释 详细参见 http://blog.csdn.net/kongguoan/article/details/38293137
但是如果在页面中使用大量或是复杂的表达式去处理数据,对页面的维护会有很大的影响。这个时候就需要用到computed 计算属性来处理复杂的逻辑运算 1.优点: 在数据未发生变化时,优先读取缓存。computed 计算属性...
eclipse中的setter与getter注释,实体的编写,在代码编写工程中能清晰了解此意
ES6 类(Class)的继承(extends)和自定义存(setter)取值(getter)详解,博客地址: http://blog.csdn.net/pcaxb/article/details/53784309
java 的eclipse或idea等 定义变量时 直接引入lombok.jar包 在类外部 引入@AllArgsConstructor @NoArgsConstructor @Data 简便方法引入getter/setter/tostring等方法
在Kolin中,将这些类统一称为数据类,用关键字data标记。 data class User(val name: String, val age: Int) 编译器会根据主构造器中声明的全部属性, 自动推断产生以下成员函数: equals()/hashCode()函数对, ...
与 Vue 一样,我们使用 ES5 的 Object.defineProperty() 方法,劫持对象的 getter/setter ,从而实现给对象赋值时(调用 setter),执行 watch 对象中相对应的函数,达到监听效果。 代码 不啰嗦,上代码,真实可用...
eclipse小工具 getter和setter 自动添加中文的注释
eclipse中setter/getter方法自动添加属性注释,详情参考http://blog.csdn.net/yuxinabc/article/details/49179113
eclipse修改setter/getter配置,实现自动生成方法时自动抽取属性上的注释:https://blog.csdn.net/yyaijunji/article/details/84639609
第二十五课 getter 设置学习目录getter 设置介绍与用法一.getter 设置介绍与用法Vuex 允许我们在 store 中定义 getter,就像计
已修改 注释添加 生成路径不存在报异常
主要介绍了使用Mybatis遇到的there is no getter异常,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是 ES5 中一个无法 shim 的...
吸气剂 在Java中使用Getter和Setters
a.value是对value变量的getter方法调用,如果在getter方法实现中抛出异常,可以阻止对value变量的访问 2、对dom变量进行监听: window.name是一个跨域非常好用的dom属性(大名鼎鼎,详见百度),如果覆盖window.name...
然后您可以通过以下方式从 $imdb 中提取数据: $imdb->get_title(); // to get movie's title $imdb->get_year(); // to get movie's produced year (little buggy) $imdb->get_thumb(); // to get movie's ...