Простым методом удаления типа:
public void deleteInvisibleNotice(Notice noticeName) {
EntityManager iem = EntityManagerProvider.getEntityManager();
try {
iem.getTransaction().begin();
Notice localNotice = iem.find(Notice.class, noticeName.getId());
iem.remove(localNotice);
iem.getTransaction().commit();
} finally {
iem.close();
}
}
Удалить связанные с этой записью записи в другой таблице, естественно не получится, а кроме того, ее просто нельзя удалить, ибо нарушится целостность БД или что-то в этом духе, в общем не даст БД ее удалить, выдав ошибку (раньше наверное гибернейт заругается, в общем не суть.)
Порывшись в интернете нашел способ, который и применил, скорее всего я его немного изменю, но суть от этого не изменится - он работает.
public void deleteNoticeAndHisParameters(Integer noticeId) {
EntityManager iem = EntityManagerProvider.getEntityManager();
try {
iem.getTransaction().begin();
Notice localNotice = iem.find(Notice.class, noticeId);
Query q = iem.createQuery("select Object(o) from ParameterValue as o where o.notice = :notice");
q.setParameter("notice", localNotice);
List
for (ParameterValue parameterValue : parameterValuesList) {
parameterValue.getNotice().getParameterValues().remove(parameterValue);
iem.remove(parameterValue);
}
localNotice = iem.merge(localNotice);
iem.remove(localNotice);
iem.getTransaction().commit();
} finally {
iem.close();
}
}
Комментариев нет:
Отправить комментарий