DAO层的异常应该向上抛吗

owenludong1122 2011-03-16 12:32:01
dao层操作数据库,一般是把异常抛给service或action,还是直接在dao里try catch掉?
...全文
1026 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
our651 2011-03-18
  • 打赏
  • 举报
回复
抛,是必须滴,而且不单单抛出去,很多情况下可能有自己的异常把原始异常包起来,加以业务说明。比如重复插,数据库会告诉你重复主键,但是你可以用中文业务上进行一些描述抛给业务层,知道给用户看到。
无聊找乐 2011-03-17
  • 打赏
  • 举报
回复
当然要抛出去

而且最好 用 runtimeException抛

rainsilence 2011-03-17
  • 打赏
  • 举报
回复
而且遇到了同时调用两个Service,并且要在同一个事务处理的情况,你把事务定义在Service层,怎么处理。。

Service层方法声明式事务的执行顺序是:Spring Aop(doStart中启动事务)->Service方法->Spring Aop(doEnd关闭事务),严格来讲,是在Service的上层做的事务处理,而不是属于Service这层。。
rainsilence 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 chenmiaoquan2008 的回复:]

引用 2 楼 rainsilence 的回复:
向上抛好管理些。

因为你框架的结构必然是
webmvc包着业务Service再包着Dao。

一路向上就会抛到webmvc。然后由webmvc接收到后迁移到出错页面。当然特殊情况要特殊处理。

我一直是到service层处理,声明式
[/Quote]

Service层方法声明式的对挖。那还是在webmvc中调用啊。。。。那不是变相还是到了webmvc这端吗?
ghostresur 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]

DAO 不应该把异常处理掉,因为事务的边界不在 DAO 层上,而是在 Service 层上,假如一个业务逻辑调用了两个 DAO 的方法(A、B)组成一个事务体,若 A 正常执行了,而 B 执行时却发生了异常,这时 A 的执行就需要回滚,若将 B 中的异常捕获了,那根本就不知道 B 是正常执行而是异常执行了,也无法处理事务了。
[/Quote]

Pc498471249 2011-03-17
  • 打赏
  • 举报
回复
虚拟机表示毫无鸭梨~~~~~
owenludong1122 2011-03-17
  • 打赏
  • 举报
回复
不能在ACTION里 处理吗
Horrison 2011-03-17
  • 打赏
  • 举报
回复
随便抛吧,我就是瞎弄
dcyydc 2011-03-17
  • 打赏
  • 举报
回复
应该往上抛,对于非运行时异常,要变为RunTimeException抛出去!
hbrains 2011-03-17
  • 打赏
  • 举报
回复
向上抛,最好不要在dao层解决这类异常~
jaystarba 2011-03-17
  • 打赏
  • 举报
回复
抛到service();
wshcdr 2011-03-17
  • 打赏
  • 举报
回复
我觉得应该是朝 service层抛
悲伤的驴 2011-03-17
  • 打赏
  • 举报
回复
我一般是在service层中处理,一个事务管理嘛
keke18181818 2011-03-17
  • 打赏
  • 举报
回复
我做的 也是try catch 掉 没必要把他抛给service
duben4814 2011-03-16
  • 打赏
  • 举报
回复
我做的都是直接在dao里try catch掉,我认为各个处理各个的异常好些。
lzj0470 2011-03-16
  • 打赏
  • 举报
回复
我感觉异常都应该往上层抛
chenmiaoquan2008 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rainsilence 的回复:]
向上抛好管理些。

因为你框架的结构必然是
webmvc包着业务Service再包着Dao。

一路向上就会抛到webmvc。然后由webmvc接收到后迁移到出错页面。当然特殊情况要特殊处理。
[/Quote]
我一直是到service层处理,声明式
gf1990 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
DAO 不应该把异常处理掉,因为事务的边界不在 DAO 层上,而是在 Service 层上,假如一个业务逻辑调用了两个 DAO 的方法(A、B)组成一个事务体,若 A 正常执行了,而 B 执行时却发生了异常,这时 A 的执行就需要回滚,若将 B 中的异常捕获了,那根本就不知道 B 是正常执行而是异常执行了,也无法处理事务了。
[/Quote]

Dao层抛出支,在Service层捕获。
+1
cheniqit1 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]

DAO 不应该把异常处理掉,因为事务的边界不在 DAO 层上,而是在 Service 层上,假如一个业务逻辑调用了两个 DAO 的方法(A、B)组成一个事务体,若 A 正常执行了,而 B 执行时却发生了异常,这时 A 的执行就需要回滚,若将 B 中的异常捕获了,那根本就不知道 B 是正常执行而是异常执行了,也无法处理事务了。
[/Quote]

我确实是佩服 火龙哥的说服能力啊
im110 2011-03-16
  • 打赏
  • 举报
回复
Dao层抛出支,在Service层捕获。
加载更多回复(5)

81,117

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧