web-dev-qa-db-ger.com

JPA - Für den Typ kann kein Validator gefunden werden

Ich habe eine Entitätsklasse, die einen Aufzählungstyp für eine der Eigenschaften verwendet, und ich erhalte die folgende Ausnahme, wenn ich die Entität beibehalten möchte:

javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo

Irgendeine Idee, warum dies passieren könnte? Ich denke, da es sich um ein Enum handelt, sollte es bereits vom Compiler validiert werden, so dass kein Validator erforderlich ist. (Code unten)

Die Entitätseigenschaft:

@Enumerated( EnumType.STRING )
@Column( name = "seeded_flag" )
private BaseYesNo seededFlag;

public BaseYesNo getSeededFlag() {
    return this.seededFlag;
}

public void setSeededFlag( BaseYesNo seededFlag ) {
    this.seededFlag = seededFlag;
}

Und die Definition des Aufzählungstyps:

public enum BaseYesNo {
    YES( "Y" ),
    NO( "N" );

    private String yesNoVal;

    private static Map< String, BaseYesNo > stringToEnum = new HashMap< String, BaseYesNo >();

    static {
            for ( BaseYesNo byn : BaseYesNo.values() ) {
            BaseYesNo.stringToEnum.put( byn.toString(), byn );
        }
    }

    BaseYesNo( String yesNoVal ) {
        this.yesNoVal = yesNoVal;
    }

    public static BaseYesNo fromString( String dbValue ) {
        return BaseYesNo.stringToEnum.get( dbValue );
    }

    @Override
    public String toString() {
        return this.yesNoVal;
    }
}
22
GreenSaguaro

Ich hatte den gleichen Fehler wie du. Das Problem bei mir war, dass ich fälschlicherweise @Size auf meiner Enumeneigenschaft platziert hatte:

public class PhoneNumber {
  @Size(max=30) //ERROR: this validation annotation is what caused my error
  @Nonnull
  @Enumerated(EnumType.STRING)
  private Type type;
  @Size(max = 30)
  @Nonnull
  private String number;

  public enum Type {
    Cell, Home, Work, Other
  }
}

Nachdem ich den fehlerhaften @Size entfernt hatte, verschwand mein Fehler.

@Enumerated hat für mich keine Probleme verursacht, und ich bezweifle, dass @Column dies tun würde. Vielleicht hatten Sie eine andere Validierungsanmerkung, die Sie wie ich überflogen haben.

Für meine Tests verwendete ich hibernate-validator-4.1.0-Final.jar

41
pgreen2

Ich bin auf dieselbe Situation gestoßen, aber mit der Meldung Es konnte kein Validator für den Typ int gefunden werden. Bei der Suche im Web habe ich einige Lösungen gefunden, von denen die meisten darauf abzielen, den Typ int in den Typ Integer zu ändern, da der Typ Integer Nullen akzeptiert. wie hier: Validierung - Leeres int-Feld

leider hat das bei mir nicht funktioniert. Aber als ich @size mit @Min und @Max ersetzte, lief alles super. in der Hoffnung, dass dies Ihnen helfen kann.

1
khldqr