`
爱像天空
  • 浏览: 197717 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Dao层(hibernate实现)的异常是在Dao层类内处理还是抛到上一层(Service业务层)

    博客分类:
  • SSH
阅读更多
Dao层(hibernate实现)的异常是在Dao层类内处理还是抛到上一层(Service业务层)

如果抛出的话是抛出运行时异常还是非运行时异常

我知道怎么写都行,但我想更贴近实际开发中的情况,请有经验的朋友指点一下
问题补充:
谢谢大家
不过还有一点我很想弄明白,就是Dao的异常是不是throws给Service,那Service层的异常是直接在方法内用try...catch处理还是再throws给Action呢
问题补充:
嗯,大概有数了,我在事务控制上是用Spring声明式事务统一管理的。
现在的异常是Dao层的,比如hibernateTemplate里各种方法抛出的DataAccessException,我自定义了一个异常继承自Exception,然后DAO层的接口方法throws这个自定义的异常
问题补充:
可是不是应该抛出非运行时异常比较好吗

Exception:表示可恢复的例外,这是可捕捉到的。

Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

    但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

    出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。

    如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。



没什么好不好的,checked exception一般是程序中出的错,因此总是要抛出,并被处理的。而runtime exception在上面说过,通常由JVM接管的,spring就认为这个异常很严重,非要处理,所以要回滚。而其它的异常一般不主动回滚,由程序员来决定。当然,偷懒的作法就是直接抛出runtime exception,那spring就得处理了。
其实常见异常spring都处理好了.

一般都是抛出非运行时异常,


lovewhzlq (CTO) 2009-10-19
由于Spring中一般配置都是对运行时异常进行回滚,非运行时异常不回滚, 如果有回滚操作时,偶一般将应用的异常继承为运行时异常(怕麻烦),不然就继承非运行时异常,再在spring中配置为异常发生时回滚。
当然如果没有回滚需求的话,那就抛出checked exception好了,(hibernate就这样干的,逻辑性好)
蔡华江 (架构师) 2009-10-19
Service层的异常当然是不能自己处理,因为service层是业务逻辑层,不是应用层,不应该处理掉异常,应该由应用层也就是action部分来处理

throws给Action处理
lovewhzlq (CTO) 2009-10-19
当然可以try..catch..进行处理,这就随程序员的心情了
不过在spring中是可以对service的事务和异常进行统一处理的,就在前面提过,默认情况下,如果spring发现service抛出runtime exception,就回将回滚事务。
当然如果没什么事务控制的情况下,就是继续往上抛了,看action能不有处理,
如果action不能处理,就会输出日志,而页面就会出现找不到页面错误了
蔡华江 (架构师) 2009-10-19
没这必要,DataAccessException就是spring封装的一个RuntimeException,直接抛出就行了
蔡华江 (架构师) 2009-10-19
一般都是抛出非运行时异常的,
lovewhzlq (CTO) 2009-10-19
最好是一层一层往外抛,到了Action层,自己就写一个异常处理类,处理掉这个异常,并以友好的页面,呈现给前台,让访问者知道发了什么事。
sunlightcs (架构师) 2009-10-21
分享到:
评论

相关推荐

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...

    泛型dao 泛型dao 泛型dao

    当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑...

    虚拟数据层:Struts2、Hibernate、Spring整合的泛型DAO 代码

    泛型dao 即:不写重复的dao 。这个技术 能让 dao层 和 service层 不写一行代码。外国都用这个泛型DAO了 中国还是一个类一个dao的写,我生气就写了这个文章了。 在本文中,我将为您展示如何避免再三地重复 DAO 代码

    java大作业基于SSH框架的学生成绩管理系统源码.zip

    java基于SSH框架的学生成绩管理系统源码。要求: (1) 整合Struts2、Spring和Hibernate框架...​ (3) 在Spring配置文件中增加该DAO层实现类的定义,并需要依赖注入一个SessionFactory bean的引用。 7、 开发Service

    OA系统整体设计及约定、搭建环境.rar_OA系统及配置_OA系统整体设计及约定、搭建环境_creation

    我们一般不会在dao层使用transaction,事务被配置在service层上更为合理,因为业务层方法表示逻辑上的一个原子操作。在这种环境下,如果你遇到上述异常,请考虑一下service层上没有配置transaction,transaction有...

    一个空的SSH框架,同时也支持servlet。扩展性能强,灵活度高。

    自己为一个汽车MIS系统架构的一个框架,主框架为SSH,同时根据需要扩展了servlet和JDBC(适应于大数据量查询),典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问...

    SpringBoot使用Spring-data-jpa简化数据访问层

    由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄”,有一些具体实体的Dao实现可能完全就是对模板Dao的简单代理,并且往往这样的实现类可能会出现在很多实体上。Spring-data-jpa的出现正可以让这样一个...

    图书管理系统(struts+hibernate+spring+ext).rar

    这个资料包包含了系统的全部源代码,包括实体类、DAO层、Service层、Action层以及前端页面等。开发者可以根据实际需求进行修改和扩展,快速搭建一个功能完善的图书管理系统。此外,资料包还提供了详细的文档和注释,...

    Struts2SpringHibernate整合,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)

    service:业务层,处理业务逻辑。 dao:数据访问层,数据库增删改查接口。 domain:领域实体。 util:工具类。 实体 Book:书籍,一本书,比如“《编写可读代码的艺术》”。 BookCategory:书籍分类,比如...

    Java Web项目整体异常处理机制

     拿spring+struts2+hibernate项目说明:通常一个页面请求到后台以后,首先是到action(也是所谓mvc的controller),在action层会调用业务逻辑service,servce层会调用持久层dao获取数据。后执行结果会汇总到action...

    ssh(structs,spring,hibernate)框架中的上传下载

    将FileActionForm直接作为业务层的接口入参,相当于将Web层传播到业务层中去,即将业务层绑定在特定的Web层实现技术中,按照分层模型学院派的观点,这是一种反模块化的设计,但在"一般"的业务系统并无需提供多种UI...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其中变化最大的是由web 1.0网站...

    基于JAVA WEB SSH框架的小区物业管理系统(源码+数据库).zip

    层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和面向切面特性,hibernate的数据持久化技术、Struts的控制器实现了楼栋管理模块,房间管理模块,业主管理模块,收费管理模块,物资设备管理,...

    Spring.3.x企业应用开发实战(完整版).part2

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Spring3.x企业应用开发实战(完整版) part1

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    黑马程序员spring2016springday01上课笔记

    1 spring是开源的轻量级...(1)spring在javaee三层结构中,每一层都提供不同的解决技术 - web层:springMVC - service层:spring的ioc - dao层:spring的jdbcTemplate 4 spring版本 (1)hibernate5.x (2)spring4.x

    现代化小区物业管理系统源码(java)

    层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和面向切面特性,hibernate的数据持久化技术、Struts的控制器实现了楼栋管理模块,房间管理模块,业主管理模块,收费管理模块,物资设备管理,...

    物业管理系统java+jsp+sql server2005

    分为View层(显示层)、Control层(控制层)、Service层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和面向切面特性,hibernate的数据持久化技术、Struts的控制器实现了楼栋管理模块,房间管理...

Global site tag (gtag.js) - Google Analytics