インタフェースなしインターフェースは私がユーザ名として機能する一意のフィールドのメールでユーザテーブルを持って例外インタフェース例外例外
ヘイ、
なしインタフェースを拡張して延びています。 同じ情報で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をスローするメソッドは、これまでのところ私の頭に浮かんだすべてのソリューションの中で最も洗練されたものになりました。 私はまだ知りたいですが、この問題を解決する適切な方法は何ですか?
なぜUserDAOで同じ名前のメソッドを探していますか? –
私は個人的には、インターフェイスメソッドが例外を宣言することは間違いありません。それを 'RuntimeException'にするか、呼び出し側に強制的にキャッチして処理させるかは、その例外のビジネスロジックの意味に完全に特有です。 –
たとえば、[Set#add](http://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add%28E%29)の動作を入れ替えると、 'boolean create(Tオブジェクト)'を呼び出し、正常に作成された場合はtrueを返し、すでに存在する場合はfalseを返します。 – assylias