Я пытаюсь исправить ошибку, вызванную запросом Hibernate на моем БД, но я не могу найти, откуда идет запрос. После включения sql
log on hibernate я обнаружил, где ошибка, но не знаю, как исправить.Как найти/изменить запрос на спящий режим
Hibernate запрос (затмить журнал) "обновление students_classes установить student_id = нуль, где student_id =?"
метания: ОШИБКА [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (HTTP-локальный-127.0.0.1-8080-2) Колонка 'student_id' не может быть пустым
Ошибка выброшены на этой линии:
student = studentDAO.save(student);
где сохранить происходит от
public Entity save(Entity entity) throws Exception {
Entity result = null;
try {
trimAllStrAttributes(entity);
result = em.merge(entity);
} catch (Exception e) {
logger.error("Exception in AbstractDAO", e);
throw e;
}
return result;
}
private void trimAllStrAttributes(Entity product) throws IntrospectionException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
final Class c = product.getClass();
for (PropertyDescriptor propertyDescriptor : Introspector.getBeanInfo(c, Object.class).getPropertyDescriptors()) {
Method method = propertyDescriptor.getReadMethod();
if (method != null) {
String name = method.getName();
// If the current level of Property is of type String
if (method.getReturnType().equals(String.class)) {
String property = (String) method.invoke(product);
if (property != null) {
try {
Method setter = c.getMethod("set" + name.substring(3), new Class<?>[] { String.class });
if (setter != null) {
setter.invoke(product, property.trim());
}
} catch (NoSuchMethodException nsme) {
}
}
}
}
}
}
Это может быть проблемой отображения, так вот мой ан Tities:
StudentClasses
@Column(name = "student_id")
private Long studentId;
@Column(name = "classes_id")
private Long classesId;
Студент
@AuditJoinTable
@ManyToMany
@JoinTable(name = "students_classes",
joinColumns = @JoinColumn(name = "student_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "classes_id", referencedColumnName = "id"))
private List<Classes> classes;
@NotAudited
@OneToMany
@JoinColumn(name = "student_id")
private List<StudentClasses> studentsClasses;
Что я должен делать? Измените запрос hibernate (где его найти?) Или есть проблема на уровне сопоставления?
Вы должны включить трассировку стека в вопросе – meskobalazs
Вы делаете 'setStudentClasses (newClasses)' в вашем коде, заменяя управляемой коллекции? Что делает 'trimAllStrAttbributes'? –
Соответствующая часть stacktrace уже здесь @meskobalazs. Я отредактировал сообщение новый метод M. Deinum –