浏览 2236 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-16
在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,让您的程序更健壮。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |