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;
}
}
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
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.