2016-06-04 6 views
0

им пытаются проверить этот метод, чтобы удалить объект из базы данных h2:h2 JPA удалить метод не работает Java

public boolean delete(T entity) { 
    if (entity == null) { 
     throw new IllegalArgumentException(); 
    } 

    boolean ret = true; 

    EntityManager em = entityManager(); 

    try { 
     EntityTransaction tx = em.getTransaction(); 
     tx.begin(); 
     em.remove(em.merge(entity)); 
     tx.commit(); 
    } catch (RollbackException ex) { 
     ret = false; 
    } finally { 
     em.close(); 
    } 

    return ret; 
} 

этот метод возвращает истину, если объект находится в базе данных, и удаляет его, но также возвращает true, если данный объект не находится в базе данных. Может кто-нибудь объяснить мне, почему? спасибо.

+0

бы удаления несуществующего объект вызывает исключение? – MadProgrammer

+0

вот что я пытаюсь сделать, но не знаю, действительно ли это работает –

ответ

2

merge будет сохранять объект, если он еще не существует. Таким образом, вы создаете объект (с merge), а затем удаляете его сразу (с remove). Таким образом, исключение не выбрасывается.

Если вы хотите удалить объект и возвращает логическое значение, удаляется ли вы это или нет, то вы могли бы сделать ...

public boolean delete(T entity) { 

    if (entity == null) { 
     throw new IllegalArgumentException(); 
    } 

    EntityManager em = entityManager(); 
    EntityTransaction tx = em.getTransaction(); 

    try { 
     tx.begin(); 
     em.refresh(entity); 
     em.remove(entity); 
     tx.commit(); 
     return true; 
    } catch (EntityNotFoundException ex) { 
     tx.rollback(); 
     return false; 
    } catch (RuntimeException ex) { 
     tx.rollback(); 
     throw ex; 
    } finally { 
     em.close(); 
    } 

} 
+0

, так как я должен это делать? becouse я удалил слияние, но его все еще тот же –

+0

Добавлен пример – Pace

+0

refresh method throws EntityNotFoundException или вы можете проверить, завершает ли объект в db методом find. Find вернет null, если сущность не существует. –