Ограничения проверки компонентов нарушены при выполнении автоматической проверки компонентов в событии обратного вызова: "prePersist"
Автор вопроса: Valter SilvaОтветов: 7
Я хотел бы сохранить birthdate, поэтому я выбрал date в MySQL, когда я создаю свои сущности на основе своей базы данных, получается так:
import java.util.Date;
// ..code
@NotNull(message="fill you birthdate")
@Temporal(TemporalType.DATE)
private Date birthdate;
Но когда я пытаюсь сохраниться, это дает мне эту ошибку:
Ограничения проверки компонентов нарушены при выполнении автоматической проверки компонентов в событии обратного вызова: "prePersist". Подробности см. во встроенных ConstraintViolations.
Что я здесь делаю неправильно? Я читал что-то об определении часового пояса в Google, я из Бразилии, как мне это сделать?
ИЗМЕНИТЬ
package entity;
import java.io.Serializable;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import java.util.Date;
import java.util.List;
/**
* The persistent class for the user database table.
*
*/
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Temporal(TemporalType.DATE)
private Date birthdate;
@NotNull(message="informe seu e-mail")
@Email(message="e-mail inválido")
private String email;
@NotNull(message="informe seu gênero")
private String gender;
private String image;
@NotNull(message="informe seu nome completo")
private String name;
@Size(min=6,max=16, message="senha com no mínimo: 6 dígitos e no máximo 16 dígitos")
@NotNull(message="informe sua senha")
private String password;
//bi-directional many-to-one association to Document
@OneToMany(mappedBy="user")
private List<Document> documents;
//bi-directional many-to-one association to QuestionQuery
@OneToMany(mappedBy="user")
private List<QuestionQuery> questionQueries;
//bi-directional many-to-one association to Team
@OneToMany(mappedBy="user")
private List<Team> teams;
public User() {
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getBirthdate() {
return this.birthdate;
}
public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getImage() {
return this.image;
}
public void setImage(String image) {
this.image = image;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Document> getDocuments() {
return this.documents;
}
public void setDocuments(List<Document> documents) {
this.documents = documents;
}
public List<QuestionQuery> getQuestionQueries() {
return this.questionQueries;
}
public void setQuestionQueries(List<QuestionQuery> questionQueries) {
this.questionQueries = questionQueries;
}
public List<Team> getTeams() {
return this.teams;
}
public void setTeams(List<Team> teams) {
this.teams = teams;
}
public void print() {
System.out.println("User [id=" + id + ", birthdate=" + birthdate + ", email="
+ email + ", gender=" + gender + ", image=" + image + ", name="
+ name + ", password=" + password + "]");
}
}
у вас есть @PrePersist в коде вашей сущности? Если это так, пожалуйста, вставьте его также Marthin 10.10.2012
это очень раздражающее исключение, потому что раньше у меня никогда не было проблем с Date.. Valter Silva 10.10.2012
Это довольно общая ошибка, она может возникнуть из-за ошибок проверки в каком-то другом поле вашей модели. Мой обычный подход: включить ведение журнала SQL и параметров (просто для EclipseLink, но я думаю, что большинство поставщиков JPA поддерживают его) или выполнить попытку/поймать em.flush() (чтобы принудительно выполнить фиксацию вместо ожидания фиксации контейнера) и зациклить ConstraintViolations, чтобы найти проблему. Tasos P. 11.10.2012
Чтобы получить более точные ответы от пользователей JPA, укажите реализацию/версию JPA, поставщика/версию сервера БД и используемую версию драйвера JDBC. Первым шагом будет попытка отключить проверку бина в persistence.xml с помощью <property name="javax.persistence.validation.mode" value="none" /> BalusC 11.10.2012
У меня возникла та же проблема, но после нескольких часов поиска ответа, наконец, я нашел его.... Вам следует отредактировать свой класс AbstractFacade.java и добавить этот код
Теперь этот метод сообщит вам, какое свойство и почему оно не проходит проверку. Я надеюсь, что это работает для вас, как и для меня.
Ответ 2 · рейтинг 22 · Ahmed Raaj
У меня есть короткий путь, поймайте следующее исключение, когда вы сохраняете сущность. В моем случае это метод добавления EJB. где я делаю em.persist(). Затем проверьте журнал сервера, вы увидите, какой атрибут имеет нарушение ограничения.
Ошибка показывает, что объект, который вы пытаетесь сохранить, не соответствует ограничениям базы данных, поэтому попробуйте определить точные значения, которые вы вставляете в базу данных, прежде чем вставлять их на самом деле.
и попробуйте также прокомментировать/опустить аннотацию @NotNull.
Ответ 4 · рейтинг 5 · Valter Silva
Что я сделал, чтобы решить свою проблему, так это инвертировать порядок @Size и @NotNull
до:
@Size(min=6,max=16, message="senha com no mínimo: 6 dígitos e no máximo 16 dígitos")
@NotNull(message="informe sua senha")
private String password;
после:
@NotNull(message="informe sua senha")
@Size(min=6,max=16, message="senha com no mínimo: 6 dígitos e no máximo 16 dígitos")
private String password;
Я не знаю, почему этот заказ так важен, но он имеет значение =] Всем спасибо!
Ответ 5 · рейтинг 5 · mpunktw
Конечно, ответ Иоманипа совершенно правильный! Я просто немного расширил его. Может быть, это тоже поможет:
Я потратил несколько часов на борьбу с этой ошибкой, пока пытался сохранить сущность.
Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
Это сообщение об ошибке бесполезно, довольно запутанно...
В любом случае в моем случае причиной ошибки была разница между аннотацией в Enity