JPA – 找不到类型为enum的validation器

我有一个实体类,其中一个属性使用枚举类型,当我尝试持久化实体时,我得到以下exception:

javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo 

知道为什么会这样吗? 我的想法是,因为它是一个枚举,它应该已经由编译器validation,所以不需要某种validation器。 (以下代码)

实体属性:

 @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 enum BaseYesNo { YES( "Y" ), NO( "N" ); private String yesNoVal; private static Map stringToEnum = new HashMap(); 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; } } 

我和你有同样的错误。 我的问题是我错误地将@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 } } 

一旦我删除了错误的@Size ,我的错误就消失了。

@Enumerated对我没有任何问题,我怀疑@Column会。 也许你有另外一个validation注释,就像我一样。

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

我遇到了相同的情况,但是消息中没有找到类型为int的validation器。 在网上搜索我发现了一些解决方案,其中大多数都专注于将类型int更改为Integer类型,因为类型Integer接受空值。 就像在这里: validation – 空int字段

不幸的是,这对我没用。 但当我用@Min和@Max取代@size时,一切都很顺利。 希望这可以帮助你。

我遇到了和你一样的错误,但是消息是“找不到类型的validation器:java.lang.Long。我花了很多时间查看代码,直到我看到之前的解决方案,因此,我删除了所有 @Size来自实体代码的条目以及问题都消失了。我实际上应该找出实体源代码中哪个是违规行但来自另一个更开发人员友好的平台(IBM i Series)我会等到错误消息得到改进给我们更好和准确的理由。