Frage

Ich versuche, Einschränkungen hinzufügen Überprüfung, wie hier beschrieben So geben Sie die Mächtigkeit einer @OneToMany in Eclipse / JPA

War es hilfreich?

Lösung

Hier sind die Abhängigkeiten Ich verwende (mit 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>

Dass man aus diesem Repository bekommen:

<repositories>
  <repository>
    <id>jboss</id>
    <name>JBoss repository</name>
    <url>http://repository.jboss.org/maven2</url>
  </repository>
</repositories>

Andere Tipps

Die Abhängigkeiten als 2019:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.16.Final</version>
</dependency>

Dies zieht transitively in der Abhängigkeit der API Bean Validation, so brauchen Sie nicht, dies zu tun mehr:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

Für zusätzliche Funktionen, Expression Language und CDI Unterstützung, könnte man hinzufügen müssen:

<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>

Quelle: Hibernate Validator Dokumentation

Diese sind alle in Maven Zentral Repo, so brauchen Sie nicht die JBoss-Repo hinzuzufügen.

Und BTW hier ist mein Beispiel bequeme Methode:

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() );
    }
}

Die Origin.Wise ist so etwas wie JAXB des @XmlLocation Locator.


Im Jahr 2013 (das Original post) Versionen waren:

    <!-- 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>

Eine alternative andere Lösung als Hibernate

Übersicht |

javax.validation (validation-api) ist Validierungsregeln, die JSR 380 Java Bean Validation Specification folgt. Die Validierungsregeln müssen eine validator, um die Validierung gemäß den Validierungsregeln auszuführen.

Und es gibt verschiedene Validatoren wie hibernate (das populärste), Bval, etc.

BVAL

Bval ist eine alternative Lösung, dass ich denke, es ist auch ziemlich cool neben Hibernate. Und hier können Sie meine alternative Lösung wie folgt vor:

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>

Implementierung

erstellen statisch ein Validator

...

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();
    }

Dort gehen Sie !!!.
Auch hier Validator, es ist nur ein Validator, in dem Sie einfach auf andere Validatoren wechseln.

Pro & Con

Es ist nicht so populär, aber Du wird es mögen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top