如何看懂数据库抛出的exception

hyifeng 2005-06-27 02:09:03
耳熏目染了好久的hibernate,
刚好,亲身使用了一段时间的nhibernate。
实践上的问题真不少,
lazy session生存管理,性能优化等问题。

现在遇到棘手的事情是数据库异常的判断。

本来,约束我是做在业务逻辑里面的。
在保存数据库前,主动检查数据库存在的冲突。
因为防止并发出错,把检查和更新的一段临界区代码lock起来。
在效率方面我已经是做出最大的妥协了,
为了检查,多次的数据库交互,还有并发保护。
可是,如果在更新关联到collection时,我是不是把collection一个一个地检查?
在我还没有修改过collection检查?更或者,这个lazy collection还没读出来?

我翻看了hibernate的文档,中可能有两个东西能帮上忙。beforeUpdate volidatable
但即使上面两个真能解决这个问题,还是要考虑并发。

但现在我把约束做在了数据库上。
在处理业务代码中,只管调用update和catch exception。
在数据层中,通过判断数据库异常(例如,是违反了表中的那一个约束),
转换成业务异常,再往业务层抛。

可是,我没办法从exception中判断出触发的原因,即使是SqlError也没有。
我想到的唯一的信息可获取于 exception.Message,
通过字符串搜索?我无法忍受。

直接把message输出也不符合我的要求。

意思是说,我没办法用数据库的约束功能?
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
renyu732 2005-06-27
  • 打赏
  • 举报
回复
关注...
hyifeng 2005-06-27
  • 打赏
  • 举报
回复
表达能力真差,自己都看不懂自己想说什么,
再说一次,

如果在某个数据表里存在几个约束,
在执行插入动作时,接到了exception,我如何判断exception 是违反了那一个约束。

如果无法检测,如何处理?
是不是不适合在数据库里做约束?

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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