2017-09-22 12 views
0

私が求めている質問は、本当にシンプル(愚かなものでも)かもしれません。javax validatorとhibernateバリデータはどのように関連していますか?違いは何ですか?

私はspring-hibernate MVCアプリで検証を使用していました。私は、javax.validationパッケージに由来する@NotNull、@Patternなどの制約を使用しています。 @Emailのような私の制約は、org.hibernate.validator.constraintsからインポートされます。バリデータークラスでは、ValidatorFactoryと他のクラスまたはインターフェース(Validation、Validatorなど)を使用します。これらはすべてjavax.validationからのものです。私は本当にこれと混同しました。

次に、正確には、バリデーター・バランサとバウンダリ・バリデーター・パッケージが正確に何であるかを詳しく調べ始めました。明らかにJSR303の実装です。

は私がさらに私を混乱させるために

ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); 

を使用し、検証するために、私はこのように書きValidatorFactoryインスタンス化のもう一つの方法読む -

ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure().buildValidatorFactory(); 

をし、それが正常に動作します!

これらの両方をよく理解してください。

ありがとうございました。

+0

ありがとうございました。つまり、彼らは同じであるということですか?もしそうであれば、なぜ同じことがたくさんあるのですか?同様に、違いがあるはずですね。 – nikhil

+0

いいえ、私は彼らが同じであると言っているわけではありません。私は、規格を定義し、実装をしておらず、もう一方はその規格の実装を提供していると言っています。 Beanの検証には多くの実装がありません。しかし、それぞれが多かれ少なかれ効率的であり、標準によって要求されるものよりも多かれ少なかれ電子メールバリデータのような追加の機能を提供するものがいくつかあります。 –

+0

import javax.validation.constraintsがインポートされたときに、それがHibernateによって内部的に実装されていることを意味しますが、その名前は標準のためにjavax.validationですか? – nikhil

答えて

0

Javaで物事の全体の多く(など、セキュリティ、JDBC、JPAなど)として、標準があり、インタフェースおよび標準クラス(すなわちjavax.validationクラス)を定義豆の検証を呼び出し、そしてあなたこれらのクラスとインタフェースのいくつかの実装の中から選択することができます(それらのうちの1つであるhibernateバリデーター)。

The landing page of hibernate validatorはそれを告げる:

Hibernateバリ5.xのは、リファレンス実装ビーンバリデーション1.1です!

+0

ありがとうございます。つまり、彼らは同じであるということですか?もしそうであれば、なぜ同じことがたくさんあるのですか?同様に、違いがあるはずですね。 – nikhil

関連する問題