JPA - No validator could be found for type: enum

半腔热情 提交于 2019-12-09 07:48:41

问题


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

回答1:


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




回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/6937076/jpa-no-validator-could-be-found-for-type-enum

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!