JPA - для типа: перечисление не найдено.
У меня есть класс сущности, который использует тип перечисления для одного из свойств, и я получаю следующее исключение, когда пытаюсь сохранить объект:
javax.validation.UnexpectedTypeException: No validator could be found for type: model.schema.BaseYesNo
Любая идея, почему это может произойти? Мое мышление состоит в том, что, поскольку это перечисление, оно уже должно быть проверено компилятором, поэтому нет необходимости в каком-то валидаторе. (код ниже)
Свойство entity:
@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< 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
У меня была такая же ошибка, как и вы. Проблема с моей была в том, что я ошибочно поместил @Size
в свойство enum:
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
Ответ 2
Я столкнулся с одной и той же ситуацией, но с сообщением. Нельзя найти валидатор для типа int.
поиск в Интернете Я нашел некоторые решения, большинство из которых сосредоточено на изменении типа int для ввода Integer, потому что тип Integer принимает значения null.
как здесь:
Validation - Пустое поле int
К сожалению, это не сработало для меня.
но когда я заменил @size на @Min и @Max, все прошло отлично.
надеясь, что это может дать вам руку.
Ответ 3
У меня была такая же ошибка, как и вы, но сообщение было: "Нельзя найти валидатор для типа: java.lang.Long. Я потратил много времени на просмотр кода, пока не увидел предыдущее решение, и, таким образом, я удалил all @Size записи из кода сущности, а также проблема исчезла.Я действительно должен выяснить, что является нарушением линии в исходном коде сущности, но из другой более дружественной для разработчиков платформы (IBM я Series) Я подожду, пока сообщения об ошибках не улучшатся, чтобы дать нам более точные причины.