Java JPA-找不到类型为enum的验证器

Java JPA-找不到类型为enum的验证器,java,jpa,bean-validation,Java,Jpa,Bean Validation,我有一个实体类,它对其中一个属性使用枚举类型,当我尝试持久化实体时,会出现以下异常: javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo 知道为什么会这样吗?我的想法是,由于它是一个枚举,它应该已经由编译器验证,所以不需要某种验证器。(代码如下) 实体财产: @Enumerated( EnumType.STRING ) @Column( na

我有一个实体类,它对其中一个属性使用枚举类型,当我尝试持久化实体时,会出现以下异常:

javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo
知道为什么会这样吗?我的想法是,由于它是一个枚举,它应该已经由编译器验证,所以不需要某种验证器。(代码如下)

实体财产:

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

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

public void setSeededFlag( BaseYesNo seededFlag ) {
    this.seededFlag = seededFlag;
}
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
  }
}
以及枚举类型的定义:

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;
    }
}
public enum BaseYesNo{
是(“Y”),
否;
私人字符串yesNoVal;
私有静态映射stringToEnum=newhashmap();
静止的{
for(BaseYesNo byn:BaseYesNo.values()){
BaseYesNo.stringToEnum.put(byn.toString(),byn);
}
}
BaseYesNo(字符串yesNoVal){
this.yesNoVal=yesNoVal;
}
public static BaseYesNoFromString(字符串dbValue){
返回BaseYesNo.stringToEnum.get(dbValue);
}
@凌驾
公共字符串toString(){
返回此。yesNoVal;
}
}

我和你犯了同样的错误。我的问题是我错误地将
@Size
放在了我的enum属性上:

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

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

public void setSeededFlag( BaseYesNo seededFlag ) {
    this.seededFlag = seededFlag;
}
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
  }
}
一旦我删除了错误的
@Size
,我的错误就消失了

@Enumerated
并没有给我带来任何问题,我怀疑
@Column
会不会。也许你有另一个验证注释,你像我一样浏览过


对于我的测试,我使用的是
hibernate-validator-4.1.0-Final.jar

我与您有相同的错误,但消息是“找不到类型为java.lang.Long的验证器。在看到之前的解决方案之前,我花了很多时间检查代码,因此,我从实体代码中删除了所有大小的条目,问题也就解决了。实际上,我应该找出实体源代码中有问题的那一行,但它来自另一个更为开发人员友好的平台(IBM I系列),我将等待错误消息得到改进,以提供更好、更准确的原因。

我遇到了同样的情况,但在消息中找不到int类型的验证器。 在网上搜索时,我发现了一些解决方案,其中大多数都关注于将int类型更改为Integer类型,因为Integer类型接受空值。 就像在这里:

不幸的是,这对我不起作用。 但当我用@Min和@Max替换@size时,一切都很顺利。
希望这能帮助您。

对于int数据类型和@Size注释,可能会出现此类问题。