2015-02-25 3 views
0

У меня есть следующие услуги:Hibernate. нарушает ограничение внешнего ключа в кэше

@Service 
@Transactional 
public class blablaService{ 
     .... 
     @Override 
     public void deleteSystemGroups(Set<Long> ids) { 
      List<Terminal> terminals = terminalDao.findAll(); 
      Set<SystemGroup> systemGroupsToDelete = systemGroupDao.getByIds(ids); 
      for (Terminal terminal: terminals) { 
       terminal.getTerminalSystemGroupsSet().removeAll(systemGroupsToDelete); // important 
      terminalDao.updateTerminal(terminal); 
      } 
      systemGroupDao.delete(ids); // important 
     } 
} 

и следующий дао:

public boolean updateTerminal(Terminal terminal) { 
    Session session = sessionFactory.getCurrentSession(); 
    session.update(terminal); 
    session.flush(); // ATTENTION HERE!!! 
    return true; 
} 

Сейчас он работает, но если удалить линии

session.flush(); 

я вижу следующее сообщение об ошибке :

org.postgresql.util.PSQLException: ERROR: update or delete on table "system_group" violates foreign key constraint "fk2593ed524a9b4be6" on table "terminal_system_group"| Detail: Key (group_id)=(2) is still referenced from table "terminal_system_group". 

Я понимаю причину проблемы, но я не уверен, что мое исправление хорошо.

Можете ли вы посоветовать лучшее решение?

ответ

0

Вы можете посмотреть различные варианты каскадного удаления. На этой странице описаны основы:

Cascade operations

+0

Я не вижу, что вы уверены, что после прочтения упоминалось linkl я могу реализовать свое желание. – gstackoverflow

Смежные вопросы