ここで説明するように、制約チェックを追加しようとしています。EclipseLink/JPAで@OneToManyのカーディナリティを指定する方法
4 に答える
これが私が(Mavenで)使用している依存関係です:
<dependencies>
<!-- Bean Validation API and RI -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
</dependency>
</dependencies>
このリポジトリから取得できること:
<repositories>
<repository>
<id>jboss</id>
<name>JBoss repository</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
</repositories>
2019年現在の依存関係:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
これにより、Bean Validation APIへの依存関係が推移的に取り込まれるため、これを行う必要はありません。
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
追加機能、式言語、およびCDIサポートについては、以下を追加する必要がある場合があります。
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b09</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>6.0.16.Final</version>
</dependency>
これらはすべてMavenCentralリポジトリにあるため、JBossリポジトリを追加する必要はありません。
そしてところで、これが私の便利な方法の例です:
public static <T extends Object> void validate( T object ) throws MigrationException
{
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> valRes = validator.validate( object );
if( ! valRes.isEmpty() )
{
StringBuilder sb = new StringBuilder("Validation failed for: ");
if( object instanceof Origin.Wise )
sb.append( ((Origin.Wise)object).getOrigin() );
else
sb.append(object);
for( ConstraintViolation<T> fail : valRes)
{
sb.append("\n ").append( fail.getMessage() );
}
throw new IllegalArgumentException( sb.toString() );
}
}
これOrigin.Wise
はJAXBのようなもの@XmlLocation Locator
です。
2013年(元の投稿)のバージョンは次のとおりです。
<!-- BeanValidation and Hibernate Validator. -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.0.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b08</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>5.4.0.Final</version>
</dependency>
以外の代替ソリューションHibernate
概要
javax.validation (validation-api)
次の検証ルールですJSR 380 Java Bean Validation Specification
。validator
検証ルールに従って検証を実行するには、検証ルールにが必要です。
そして、hibernate
(最も人気のあるもの)、などのさまざまなバリデーターがありますBval
。
Bval
Bval
は、他にもかなりクールだと思う代替ソリューションですHibernate
。そして、ここであなたは私の代替解決策に従うことができます:
MVN
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-jsr</artifactId>
<version>2.0.2</version>
</dependency>
実装
静的バリデーターを作成する
...
import javax.validation.Validation;
import javax.validation.Validator;
import org.apache.bval.jsr.ApacheValidationProvider;
...
private static final Validator validator;
static {
validator = Validation.byProvider(ApacheValidationProvider.class).configure().buildValidatorFactory()
.getValidator();
}
どうぞ!!!。
繰り返しますが、バリデーターは、他のバリデーターに簡単に切り替えることができる単なるバリデーターです。
Pro&Con
それほど人気はありませんが、気に入るはずです。
Mavenプロジェクトの場合のみ、検証アノテーションにこの依存関係を使用する必要があります。
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>