软件开发过程中的事务处理(三)
2007-10-11 10:20
190 查看
在使用Hibernate时,我们会发现Hibernate在装载一个对象的时候有两个方法可以使用:load和get,而这两个方法的调用方法基本上是一致的,而唯一的区别就是,当Hibernate没有找到对象时,load抛出异常,而get仅仅返回一个null。
为什么Hibernate采用这样的设计呢?在这里笔者也不敢妄加揣测,但是这一设计却可以很好地解决我们在软件开发过程中的事务处理(二) 中遇到的问题,在软件开发过程中的事务处理(二) 我们提到如果DAO方法完全不抛出异常,那么我们就会发现,很可能在service层我们需要不停的编写重复代码,而如果在DAO层抛出异常,我们就会在service层编写写操作时就会出现
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
catch(***Exception e)...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ConnectionPool.rollback(Connection);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
throw e;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
这样的代码。
那么我们完全可以向Hibernate一样,为一个方法编写两个实现,在没有发现要返回的对象时,一个方法抛出异常,而另外一个直接返回null。这样一来,我们在service层中只读操作中调用抛出异常的方法;而在写操作中调用返回null的方法,然后在service层中,判断对象是否为null,从而进行相应的操作(要方法回滚,还是继续以下的操作。)
那么我们在DAO层的API设计如下:
dao.getThread(int threadId);
doa.loadThread(int threadId) throws ObjectNotFoundException;
dao.deleteThread(int threadId);
而在service层中,delete,rate等写操作调用dao.getThread方法,而viewThread等只读方法则调用dao.loadThread方法。
版权所有: idilent 网站转载请注明作者并链接到http://blog.csdn.net/idilent,
其他转载方式请与作者联系(idilent@yahoo.com.cn)。
为什么Hibernate采用这样的设计呢?在这里笔者也不敢妄加揣测,但是这一设计却可以很好地解决我们在软件开发过程中的事务处理(二) 中遇到的问题,在软件开发过程中的事务处理(二) 我们提到如果DAO方法完全不抛出异常,那么我们就会发现,很可能在service层我们需要不停的编写重复代码,而如果在DAO层抛出异常,我们就会在service层编写写操作时就会出现
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
catch(***Exception e)...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
ConnectionPool.rollback(Connection);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
throw e;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
这样的代码。
那么我们完全可以向Hibernate一样,为一个方法编写两个实现,在没有发现要返回的对象时,一个方法抛出异常,而另外一个直接返回null。这样一来,我们在service层中只读操作中调用抛出异常的方法;而在写操作中调用返回null的方法,然后在service层中,判断对象是否为null,从而进行相应的操作(要方法回滚,还是继续以下的操作。)
那么我们在DAO层的API设计如下:
dao.getThread(int threadId);
doa.loadThread(int threadId) throws ObjectNotFoundException;
dao.deleteThread(int threadId);
而在service层中,delete,rate等写操作调用dao.getThread方法,而viewThread等只读方法则调用dao.loadThread方法。
版权所有: idilent 网站转载请注明作者并链接到http://blog.csdn.net/idilent,
其他转载方式请与作者联系(idilent@yahoo.com.cn)。
相关文章推荐
- 软件开发过程中的事务处理(二)
- 软件开发过程系统常见的错误及处理机制
- 会员开通时间处理的存储过程|软件开发
- 软件开发中的事务处理
- 会员开通时间处理的存储过程|软件开发
- Linux平台下基于BitTorrent应用层协议的下载软件开发--消息处理模块(signal_handler.h)
- 普通软件项目开发过程规范(二)—— 启动和计划阶段
- 手机软件开发管理过程中,如何采用敏捷开发模式
- 软件开发过程最佳实践(3)
- dotnet中调用存储过程的用法,不含事务处理
- 软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)
- 软件开发过程自动化原理及技术(完整示例)
- 在软件开发过程中,文档怎样编写和整理
- 软件开发过程模型
- 软件开发过程 & 文档
- Android开发中的SQLite事务处理,即beginTransaction()方法
- 诚聘软件过程工程师,高级软件工程师,软件开发工程师
- spring事务处理:调用一个方法前的事务处理过程
- 软件开发工具(三)——理论与开发过程
- 软件测试学习:软件开发的过程