使用spring,hibernate和amp;处理SQLException。 Postgres的

时间:2010-04-13 21:38:49

标签: spring

我正在使用来自Spring&的Daos的HibernateDaoSUpport开发一个项目。春天& 冬眠&将在国家申请中使用的postgres(意味着很多用户)

实际上,来自hibernate的每个异常都会自动转换为一些特定的Spring dataAccesException。

我在dabatase&amp ;;上有一个带有关键字的表格。关键字的唯一约束: 不允许重复的关键字。

我已经找到了两种方法来处理Insert Dao: 1-在插入之前手动检查复制(使用选择)。我的意思是spring事务将具有SERIALIZABLE隔离级别。显而易见的缺点是,我们现在有2个查询简单的insert.Advantage:独立于数据库

2 - 让插入物消失&捕获SqlException&将其转换为用户友好的消息&错误代码给我们的webservices的最终消费者。

解决方案2: Spring开发了一种将特定exeptions转换为自定义异常的方法。 见http://www.oracle.com/technology/pub/articles/marx_spring.html

在我的情况下,我会有一个ConstraintViolationException。

理想情况下,我想编写一个自定义SQLExceptionTranslator,用DuplicateWordException映射数据库中的重复字约束。

但是我可以在同一个表上有许多独特的约束。所以我必须得到SQLEXceptions的消息,以便找到在中声明的约束的名称 例如,创建表“uq_duplicate-constraint”。现在我对数据库有很强的依赖性。

提前感谢您的回答&请原谅我的英语不好(这不是我的母语)

1 个答案:

答案 0 :(得分:0)

根据我的经验,最好在应用程序中进行数据验证,而不是依赖于数据库。这使您的数据库的角色仅限于数据存储的角色,这意味着业务逻辑不会分散在两个层中。

当您的数据库事务同时破坏两个约束时会发生什么?在这种情况下,您的异常映射方法只会捕获第一个失败,而不是一些验证代码,可以在尝试保存时显示所有数据验证问题。

相关问题