javax.servlet.ServletException: HV000030: не удалось найти валидатор для типа: java.lang.Integer

Мне нужно обновить информацию в моей базе данных.

FacadePatient.java код класса:

public Patient update(Patient p) {

    Patient pat = em.find(Patient.class, p.getPatientId());
    p.setPatientPhone(pat.getPatientPhone());
    p.setPatientDateNaiss(pat.getPatientDateNaiss());
    p.setPatientEmail(pat.getPatientEmail());
    p.setPatientJob(pat.getPatientJob());
    p.setPatientSmoking(pat.getPatientSmoking());
    p.setPatientSize(pat.getPatientSize());
    em.merge(pat);
    return p;
}

person Héla    schedule 12.06.2013    source источник
comment
Итак, в чем проблема, что вы получаете исключение валидатора или что вы не знаете, с чего начать?   -  person JoshDM    schedule 13.06.2013
comment
выдает эту ошибку: javax.validation.UnexpectedTypeException: HV000030: не удалось найти валидатор для типа: java.lang.Integer,   -  person Héla    schedule 13.06.2013
comment
Я также изменил тип атрибута с целого на строку, но та же ошибка   -  person Héla    schedule 13.06.2013
comment
Потому что это не проблема JSF или PrimeFaces. Если вы поймали тот, который вызывает это исключение, просто взглянув на трассировку стека (javax.validation.UnexpectedTypeException будет отображаться как основная причина; его имя пакета javax.validation, в свою очередь, намекает на проблему в проверке bean-компонента JSR303; код ошибки HVxxxxxx, в свою очередь, намекает на проблему из Hibernate Validator), тогда вы бы пометили этот вопрос как [bean-validation], и тогда вопрос был бы намного быстрее понят/отвечен. Весь код JSF, опубликованный до сих пор, не имеет значения.   -  person BalusC    schedule 13.06.2013
comment
Этот вопрос также связан с javax.servlet.ServletException: HV000030: не удалось найти средство проверки для типа: java.util.Date. С уважением,   -  person Rodmar Conde    schedule 14.10.2014


Ответы (4)


HV000030: Не удалось найти средство проверки для типа: java.lang.Integer

Это произойдет, когда вы используете проверку bean-компонента JSR303 во вкусе Hibernate Validator, и у вас есть в вашем объекте JPA специфичный для Hibernate @NotEmpty для свойства Integer, например:

@NotEmpty
private Integer some;

Это совершенно неправильно. Целое число нельзя рассматривать как строку, коллекцию, карту или массив. . Вместо этого используйте стандартный @NotNull.

@NotNull
private Integer some;

Обратите внимание, что конкретная проблема совершенно не связана с JSF. В будущем, пожалуйста, узнайте, как максимально исключить шум и решить конкретную проблему, например, выполнение кода JPA индивидуально. JSF — это просто мессенджер HTTP/MVC, а PrimeFaces — просто генератор кода HTML/CSS/jQuery/UI.

person BalusC    schedule 13.06.2013

Я хотел бы добавить к приведенному выше ответу. Это исключение также будет выброшено, если у вас есть что-то вроде этого:

@Size(min = 1, max = 20)
@Column(name = "ID")
private int id;
person kamel2005    schedule 13.03.2016
comment
Я получил эту ошибку в той же ситуации. Но почему мы получаем эту ошибку. Потому что раньше он работал в моем проекте. Позже я получил эту ошибку из-за @Size. - person Hema; 10.07.2017
comment
Это также может быть причиной. размер вещей в int, boolean, tinyint вызывает эту проблему. Спасибо за комментарий - person Ishimwe Aubain Consolateur; 12.05.2018

Вы можете столкнуться с этой проблемой также в таких случаях, как показано ниже;

@Size(max = 45, message = "Field 'SomeEntityClass.yourEnumType' cannot exceed 45 characters") @Column(length=45)
@Enumerated(EnumType.STRING)
private SomeEnumType yourEnumType;

Это связано с тем, что во время проверки порядковое значение 'yourEnumType' (которое имеет целочисленный тип) обрабатывается перед сопоставлением String, которое Hibernate разрешает перед сохранением значения в базе данных.

person Bell Katapa    schedule 16.05.2017

Кроме того, если присутствует какое-либо ограничение, недопустимое для целого числа, это вызовет эту ошибку. Как аннотировать целое число с помощью:

  • @Длина (макс. = 3)
  • @Размер
person cabaji99    schedule 10.10.2018