Я использую Spring, Hibernate и Oracle для проекта. Схема базы данных была создана вручную с помощью сценария sql. Все работает нормально, пока я не столкнулся с проблемой гибернации двунаправленного каскадного сохранения «один ко многим».
В родительском классе (Product.java)
@OneToMany(mappedBy="product",
fetch=FetchType.EAGER,
cascade={CascadeType.ALL})
public Set<Picture> getPictures() {
return pictures;
}
@Transient
public void addPicture(Picture picture) {
picture.setProduct(this);
pictures.add(picture);
}
В детском классе (Picture.java)
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="lse09lse06id")
public Product getProduct() {
return product;
}
"lse09lse06id" - это столбец внешнего ключа в таблице дочерних объектов.
В моем классе контроллера:
Product product = new Product();
.... (set properties of product)
Picture newPicture = new Picture();
.... (set properties of newPicture)
product.addPicture(newPicture);
productService.addProduct(product);
В моем классе ProductService:
@Override
@Transactional
public void addProduct(Product product) {
productDAO.addProduct(product);
}
В моем классе ProductDAO:
@Override
public void addProduct(Product product) {
product.setDateCreated(new Date());
sessionFactory.getCurrentSession().save(product);
}
Исключение, генерируемое при выполнении кода контроллера:
org.springframework.web.util.NestedServletException:
Ошибка обработки запроса; вложенными
исключение
org.springframework.dao.DataIntegrityViolationException:
Не удалось выполнить пакетное обновление JDBC;
SQL [вставить в lse09pictures
(lse09content, lse09date_created,
lse09date_deleted, lse09date_updated,
lse09is_deleted, lse09lse06id,
lse09id) значения (?,?,?,?,?,?,
?)]; ограничение
[CSSE3005GG.LSE09PICTURES_FK]; вложенными
исключение
org.hibernate.exception.ConstraintViolationException:
Не удалось выполнить пакетное обновление JDBC
Одно из вложенных исключений:
java.sql.BatchUpdateException:
ORA-02291: ограничение целостности
(CSSE3005GG.LSE09PICTURES_FK) нарушено
- родительский ключ не найден
Любая помощь будет высоко ценится. Эта проблема действительно противна. Спасибо!