2012-05-04 30 views
0

インタフェースなしインターフェースは私がユーザ名として機能する一意のフィールドのメールでユーザテーブルを持って例外インタフェース例外例外

ヘイ、

なしインタフェースを拡張して延びています。 同じ情報でdao.createメソッドを2回呼び出すと、 私はorg.springframework.dao.DataIntegrityViolationException(重複するエントリ....)を取得します。 これは私のuserDao.create(o)がチェックされた例外をスローするようにします。 私はUserDao-InterfaceがGenericDao-Interfaceを拡張しているという問題があります。これは既にthrow節なしでcreateメソッドを定義しています。 cletusからJava interface extends questions(答え:これが原因の参照である理由については

public interface GenericDao<T, PK extends Serializable> { 
    /... 
    T create(T object); 
    /... 
} 

public interface UserDao extends GenericDao<User, Long> { 
     /... 
    User create(User user) throws UserExistsException; 
    /... 
} 

(:

拡張インターフェースは、それが拡張されたインタフェースよりも多くの例外をスローすることはできませんので、このコードはコンパイルされません。 ))

今私の質問: この問題を解決するベストプラクティスは何ですか?


)=事前にご回答をありがとうございましたPS: これまでのところ、私は本当に私を満たしていない回答のカップル、が出ています。 私はGenericDaoにチェック例外をスローさせることができますが、表の99%には一意フィールド(pk以外)がありません。これは受け入れられません。 UserExistsExceptionをランタイム例外にして、メソッドのユーザーに例外をキャッチしてそれをエンドユーザーに報告する必要があるため、非常にうまくいきません。 新しいuserDao.createUser()の作成 - Exeptionをスローし、既存のuserDao.create()メソッドの継ぎ目でUnsupportedOperationExceptionをスローするメソッドは、これまでのところ私の頭に浮かんだすべてのソリューションの中で最も洗練されたものになりました。 私はまだ知りたいですが、この問題を解決する適切な方法は何ですか?

+0

なぜUserDAOで同じ名前のメソッドを探していますか? –

+0

私は個人的には、インターフェイスメソッドが例外を宣言することは間違いありません。それを 'RuntimeException'にするか、呼び出し側に強制的にキャッチして処理させるかは、その例外のビジネスロジックの意味に完全に特有です。 –

+0

たとえば、[Set#add](http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add%28E%29)の動作を入れ替えると、 'boolean create(Tオブジェクト)'を呼び出し、正常に作成された場合はtrueを返し、すでに存在する場合はfalseを返します。 – assylias

答えて

1

私はお勧め:

public interface GenericDao<T, PK extends Serializable> { 
    /... 
    T create(T object) throws DaoException; 
    /... 
} 

DaoExceptionは(おそらく抽象)クラスで、UserExistsExceptionはDaoExceptionを拡張します。

+0

あなたの提案をありがとう。GenericDaoの作成メソッドの実装を使用する人々は、実装がそれをスローしないにもかかわらず例外をキャッチするように強制するので、私は個人的にはそのアプローチを気に入っていません。しかし、まだ:ありがとうございます=) – TomKeller

+0

@TomKellerそれは例外をキャッチすることを強制することは事実ですので、どの実装があなたがプログラムすると思いますか。あなたは新しいDAOを作成するときに例外をスローすることができないものを実装することを期待していますか?私の経験では、それは通常そうではありません。 – Pablo

関連する問題