JPA - No validator could be found for type: enum
I have an entity class which uses an enum type for one of the properties, and I am getting the following exception when I try to persist the entity:
javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo
Any idea why this might be happening? My thinking is开发者_如何学Python that since it is an enum, it should already be validated by the compiler, so no need for some kind of validator. (code below)
The entity property:
@Enumerated( EnumType.STRING )
@Column( name = "seeded_flag" )
private BaseYesNo seededFlag;
public BaseYesNo getSeededFlag() {
return this.seededFlag;
}
public void setSeededFlag( BaseYesNo seededFlag ) {
this.seededFlag = seededFlag;
}
And the definition of the enum type:
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;
}
}
I had the same error as you. The problem with mine was that I had mistakenly placed @Size
on my enum property:
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
}
}
Once I removed the erroneous @Size
, my error went away.
@Enumerated
didn't cause any problems for me, and I doubt @Column
would. Perhaps you had another validation annotation you skimmed over like I did.
For my testing, I was using hibernate-validator-4.1.0-Final.jar
I came across the same situation, but with the message No validator could be found for type int. searching the web I found some solutions, most of them focus on changing type int to type Integer, because type Integer accept nulls. like in here : Validation - Empty int field
unfortunately that didn't work for me. but when I substituted @size with @Min and @Max everything went great. hoping this may gives you a hand.
I had the same error as you but the message was "No validator could be found for type: java.lang.Long. I had spent a lot of time reviewing the code until I saw the previous solution and thus, I removed all @Size entries from the entity code and also the problem went away. I should actually find out which is the offending line in the entity source code but coming from another more developer friendly platform (IBM i Series) I'll wait until the error messages are improved to give us better and accurate reasons.
精彩评论