`
lokki
  • 浏览: 59970 次
  • 来自: ...
社区版块
存档分类
最新评论

用自定义getter在EL表达式中检测HibernateEntityBean中的ObjectNotFound数据丢失异常

阅读更多
用自定义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,让您的程序更健壮。
分享到:
评论

相关推荐

    EL表达式使用详解

    EL表达式(Expression Language),是一种用于Java Web开发中方便数据存取的表达式语言,最初作为JSP标准标签库(JSTL)的一部分,是JSTL 1.0为了方便存取数据而自定义的语言。EL允许开发者在JSP页面中通过简洁的...

    EL表达式详解教程.zip

    EL(Expression Language,表达式语言)是Java EE中一种强大的模板语言,主要用于在JSP页面中简化数据访问和处理。它允许开发者通过简洁的语法来访问JavaBeans中的属性,执行基本算术运算,以及调用方法。EL表达式与...

    javaJSTL_EL表达式

    而在JSP页面中,EL(Expression Language)表达式以及JSTL(JavaServer Pages Standard Tag Library)的使用则大大简化了页面数据绑定和逻辑处理的工作量。本文将重点介绍JSTL_EL表达式的概念、特点及其应用场景。 ...

    dubbo捕获自定义异常_dubbo异常捕获_dubbo异常_自定义异常_捕捉异常_

    本文将深入探讨如何在 Dubbo 中捕获自定义异常,以及相关的最佳实践。 1. **自定义异常类** 在 Java 中,自定义异常通常继承自 `Exception` 或其子类。例如,你可以创建一个名为 `CustomServiceException` 的异常...

    s:iterator的EL表达式原理

    在EL表达式中,实际上底层是使用了OGNL(Object-Graph Navigation Language)来处理对象导航和表达式的求值。OGNL是一种强大的表达式语言,可以用来获取或设置Java对象的属性,包括深层的对象属性和集合元素。例如,...

    jsp中EL表达式获取数据

    利用这些隐含对象,可以非常方便地在EL表达式中访问作用域中的数据,而无需使用表达式主体的前缀,这大大简化了代码。 通过深入理解EL表达式在JSP中的应用,开发者可以更加高效地进行Web页面的开发工作,使得数据的...

    EL表达式简单描述 初步使用

    EL(Expression Language)表达式是JavaServer Pages(JSP)技术中的一个重要组成部分,它提供了一种简洁的方式来访问和操作页面、请求、会话和应用程序范围内的数据。EL主要用于简化JSP页面中的Java代码,使页面...

    EL表达式实例[文].pdf

    总结来说,EL表达式是JSP开发中一种强大的工具,它允许开发者用更简洁的方式处理数据,提高了代码的可读性和可维护性。通过掌握EL表达式,可以更高效地构建动态JSP页面,减少不必要的Java脚本代码,使页面更加专注于...

    EL表达式1

    EL(Expression Language)表达式语言是Java服务器页面(JSP)技术中的一种强大的表达式语法,主要用于在JSP页面中方便地访问和显示数据。它提供了简洁的语法来访问JavaBeans或其他域对象中的属性和方法。EL表达式...

    EL表达式的使用

    ### EL表达式的使用详解 #### 一、EL (Expression Language) 概述 EL,即表达式语言(Expression Language),是一种简单而强大的语法,用于获取存储在JSP页面、Servlet以及应用范围内的对象属性。它主要应用于JSP...

    jsp页面中EL表达式被当成字符串处理不显示值问题的解决方法

    在JSP开发中,EL(Expression Language)表达式是一种强大的工具,用于简化页面中的数据访问。然而,有时候可能会遇到EL表达式被当作普通字符串处理,而不是执行预期的计算或访问对象属性的操作。这种情况通常与JSP...

    实际项目中java自定义异常

    在实际的Java开发项目中,自定义异常是提高代码可读性和可维护性的重要手段。异常处理是程序设计的关键部分,它有助于捕获并处理在程序执行过程中可能出现的错误或异常情况。Java提供了丰富的异常处理机制,包括预...

    jsp详解含javabean el表达式等

    【JSP详解含JavaBean和EL表达式】 JavaServer Pages(JSP)是Java平台上的一个标准技术,用于创建动态Web页面。它允许开发者将HTML和Java代码混合编写,简化了网页开发流程。JSP的核心在于它能将业务逻辑、表示层和...

    Cron表达式解析 翻译为中英文.zip

    Cron表达式是Unix/Linux系统中的定时任务调度器Cron所使用的语法,也被广泛应用于Java世界,例如Quartz、Spring等框架。它允许用户以字符串的形式定义任务的执行时间,如分钟、小时、日期等。这个压缩包文件包含了对...

    EL语言遍历集合出现PropertyNotFoundException 的两种情况

    在Java世界中,EL(Expression Language)是一种强大的脚本语言,用于在JSP视图层进行数据绑定和表达式计算。EL语言简化了从请求作用域、会话作用域、应用作用域等获取数据的过程。然而,使用EL时可能会遇到`...

    EL源代码 java实现

    EL(Expression Language)是Java EE中的一个核心组件,主要用于在JSP、JSF等Web应用程序中简化数据访问和表达式处理。它允许开发者通过简洁的语法来访问和操作Java对象的属性,而无需编写大量的Java脚本或者JSP标签...

    Hibernate使用——自定义数据类型

    在实际项目开发中,有时我们可能需要对数据库中的某些字段使用自定义的数据类型,以更好地符合业务需求。本篇文章将深入探讨如何在Hibernate中实现自定义数据类型。 首先,我们需要理解Hibernate是如何处理数据类型...

    使用基于正则表达式的模板的C#中的自定义Getter设置器

    在C#编程中,我们经常需要为类的属性创建getter和setter方法,以便于访问和修改数据。然而,手动编写这些方法对于大量属性的类来说非常耗时。为了解决这个问题,开发者可以利用正则表达式(Regular Expression)来...

    iOS getter setter方法

    在iOS开发中,getter和setter方法是Objective-C和Swift中对象属性访问的重要组成部分。它们用于获取(get)和设置(set)对象的属性值。本文将深入探讨getter和setter的概念、作用以及如何在代码中使用它们。 首先...

Global site tag (gtag.js) - Google Analytics