#model-view-controller #spring #jpa
#model-view-controller #spring #jpa
Вопрос:
У меня появляется раздражающее сообщение об ошибке при попытке вставить новый элемент в отношения «многие ко многим», используя JPA 2.0, SpringMVC 3.0.
У меня есть таблица с состояниями, а другая — с лицами. Пользователь может быть связан со многими состояниями, а состояние — со многими лицами. В данном конкретном случае у меня есть listOfStates, а затем person, и я хотел бы вставить эти элементы в мои отношения «многие ко многим».
Множество взаимосвязей (в состоянии таблицы)
//bi-directional many-to-many association to Appointment
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
name="PERSON_STATE"
, joinColumns={
@JoinColumn(name="PERSON_ID", nullable=false)
}
, inverseJoinColumns={
@JoinColumn(name="CODE_STATE", nullable=false)
}
)
Код DAO, КОТОРЫЙ я вызываю со своего контроллера
try{
getEntityManager().getTransaction().begin();
getEntityManager().persist(myPerson);
IStateDAO stateDAO = new StateDAO();
for (int i=0; i<listOfStates.length; i ){
State myState = stateDAO.findState(listOfStates[i]);
if (myState != null){
myState.getPersons().add(myPerson);
getEntityManager().persist(myState);
}
}
getEntityManager().getTransaction().commit();
getEntityManager().close();
} catch (RuntimeException re) {
getEntityManager().close();
throw re;
}
Забавно то, что этот код работает нормально, когда я не вставляю данные с веб-страницы. Что я здесь делаю не так? У меня уже есть некоторые лица и состояния в базе данных.
Сообщение об ошибке полного стека:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
Любой указатель был бы действительно оценен. Заранее всем вам спасибо.
Ответ №1:
вау! понял! Мне пришлось изменить режим проверки в моем persistence.xml от Auto до NONE, что в основном указывает приложению вообще не использовать проверку компонента. Сообщения об ошибках исчезли, и мой DAO работает хорошо.
Комментарии:
1. но отключение проверки не решает суть проблемы, оно просто игнорирует ее.
2. Спасибо за это. Но если вы можете подробнее изучить это, почему проверка была проблемой. Пожалуйста, поделитесь здесь.
Ответ №2:
В исключениях указано, что используется проверка компонента JSR 303 и настроен режим гибернации (Persistence.xml ) чтобы проверить их перед обновлением чего-либо.
Проверка компонента JSR 303 представляет собой аннотации, подобные:
- javax.validation.constraints.NotNull
- javax.validation.constraints.Size
Комментарии:
1. Спасибо за ваш ответ. Я действительно использую аннотации Hibernate validator на уровне класса для проверки моих классов при привязке их к форме. Но для этого конкретного класса я не указал никаких ограничений, что заставляет меня думать, что это больше похоже на внутреннюю вещь. я не уверен, куда теперь идти.
2. пользователь659580: В исключении не указано, что нарушение ограничения связано с классом Person!
3. но исключение возникает, когда я пытаюсь сбросить или зафиксировать Person даже сразу после операции сохранения.
4. @user659580 и больше ничего не загружается и не изменяется?
5. Существуют ли какие-либо ограничения проверки компонента в вашем графе объектов? Нет ли дополнительной информации в журнале? Где-то должен быть зарегистрирован путь к ошибке. Это даст вам представление о том, какое ограничение для какого объекта завершилось с ошибкой.