1

現在、さまざまなデータベースでデータ アクセスを使用するプロジェクトに取り組んでいます。メイン データベースは Hibernate を介して (Criteriaフレームワークまたは HQL クエリを介して) アクセスされますが、プレーンな JDBC / SQL クエリを使用して (Spring-Jdbc を介して) 他のデータベースにアクセスすることもできます。

一部の JDBC 呼び出しでは、DAO レイヤーが Spring ランタイムのいくつかのフレーバー ( 、またはTransientDataAccessExceptionなど)をスローする可能性に対処する必要がありました。DeadlockLoserDataAccessExceptionCannotAcquireLockException

私の質問: Hibernate DAO によってスローされる同様の例外を計画する必要がありますか? このような例外を示すテストを作成するのは非常に困難であり、スローできない場合は、これらのサポートを構築したくありません。また、可能であれば、正確にはどの例外ですか? どう思いますか?

4

2 に答える 2

1

Springに裏打ちされた永続性の実装からスローされた例外は、実際にはSpringに根ざしていません=>これらはデータアクセスの例外です。

したがって、純粋なHibernate実装から同様の例外を取得できます。例:

LockAcquisitionException:データベースのロックの取得に問題があることを示します

そうは言っても、これらの例外をテストすることは特に賢明ではありません。したがって、それらはRuntimeExceptionsです。Springに裏打ちされた実装からこれらの例外が発生した場合、私はむしろ問題の解決に焦点を合わせたいと思います。

于 2011-10-07T20:26:45.297 に答える
1

hibernate Session API を見てみましょう。http://docs.jboss.org/hibernate/annotations/3.5/api/index.html ? org/hibernate/Session.html 具体的には、createQuery と createCriteria です。

hql 文字列を受け取る createQuery は、Query オブジェクトを返し、HibernateException をスローします。createCriteria は、例外をスローせずに Criteria オブジェクトを返します。Criteria または Query オブジェクトで .list() を呼び出すと、HibernateException がスローされます。

ほとんどの関数呼び出しは、例外をスローする場合、HibernateException をスローします。HibernateException に加えて、NonUniqueResultException をスローする Query オブジェクトで uniqueResult() を呼び出すなど、いくつかの特殊なケースがあります。

于 2011-10-04T16:18:14.537 に答える