Gre*_*aro 22 java jpa bean-validation
我有一个实体类,其中一个属性使用枚举类型,当我尝试持久化实体时,我得到以下异常:
javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?我的想法是,因为它是一个枚举,它应该已经由编译器验证,所以不需要某种验证器.(以下代码)
实体属性:
@Enumerated( EnumType.STRING )
@Column( name = "seeded_flag" )
private BaseYesNo seededFlag;
public BaseYesNo getSeededFlag() {
return this.seededFlag;
}
public void setSeededFlag( BaseYesNo seededFlag ) {
this.seededFlag = seededFlag;
}
Run Code Online (Sandbox Code Playgroud)
和枚举类型的定义:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
pgr*_*en2 41
我和你有同样的错误.我的问题是我错误地放置@Size了我的枚举属性:
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
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我删除了错误@Size,我的错误就消失了.
@Enumerated对我没有任何问题,我怀疑@Column.也许你有另外一个验证注释,就像我一样.
对于我的测试,我正在使用 hibernate-validator-4.1.0-Final.jar