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;
}
Ответы
Ответ 1
HV000030: для типа: валидатор не найден: java.lang.Integer
Это произойдет, если вы используете JSR303 bean валидацию в аромате 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.
Ответ 2
Я хотел бы добавить к вышеуказанному ответу.
Это исключение также будет выбрано, если у вас есть что-то вроде этого:
@Size(min = 1, max = 20)
@Column(name = "ID")
private int id;
Ответ 3
Вы можете получить эту проблему также в таких случаях, как показано ниже:
@Size(max = 45, message = "Field 'SomeEntityClass.yourEnumType' cannot exceed 45 characters") @Column(length=45)
@Enumerated(EnumType.STRING)
private SomeEnumType yourEnumType;
Это связано с тем, что во время проверки порядковое значение 'yourEnumType' (которое имеет целочисленный тип) обрабатывается перед преобразованием String, которое Hibernate разрешает, прежде чем хранить значение в базе данных.