开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜